145 lines
3.5 KiB
GDScript
145 lines
3.5 KiB
GDScript
extends CanvasLayer
|
|
|
|
@onready var game_area: ColorRect = $BackGround/GameArea
|
|
@onready var target_rect: ColorRect = $BackGround/GameArea/TargetRect
|
|
@onready var feather: TextureRect = $BackGround/GameArea/Feather
|
|
|
|
@onready var player: CharacterBody3D = $".."
|
|
@onready var frog: CharacterBody3D = $"../../frog"
|
|
|
|
@onready var audio_player: AudioStreamPlayer2D = $AudioStreamPlayer2D
|
|
|
|
|
|
var cpt_col : int = -1
|
|
var is_playing : bool = false
|
|
var is_flashing : bool = false
|
|
var default_target_color : Color = Color(1.0, 1.0, 1.0, 0.6)
|
|
var tween : Tween
|
|
|
|
var one_time : bool = true
|
|
var first_time : bool = true
|
|
|
|
func _ready():
|
|
hide()
|
|
target_rect.color = default_target_color
|
|
|
|
func _input(event):
|
|
if Input.is_action_just_pressed("ui_accept") and player.can_play:
|
|
if one_time:
|
|
one_time = false
|
|
player.tuto.show_text( "tuto2", true)
|
|
toggle_minigame()
|
|
|
|
# Contrôle de la plume avec la souris (uniquement sur Y)
|
|
if is_playing and event is InputEventMouseMotion:
|
|
var local_mouse_y = game_area.get_local_mouse_position().y
|
|
|
|
feather.position.y = clamp(local_mouse_y, 0, game_area.size.y - feather.size.y)
|
|
|
|
func toggle_minigame():
|
|
is_playing = !is_playing
|
|
if is_playing:
|
|
show()
|
|
|
|
AudioServer.set_bus_effect_enabled( 0, 0, true )
|
|
AudioServer.set_bus_volume_db( 2, AudioServer.get_bus_volume_db(2)-20 )
|
|
|
|
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
|
player.camera_pov.make_current()
|
|
target_rect.position.y = game_area.size.y - target_rect.size.y
|
|
|
|
if first_time:
|
|
await get_tree().create_timer( 15 ).timeout
|
|
first_time = false
|
|
else:
|
|
await get_tree().create_timer( 2 ).timeout
|
|
if is_playing:
|
|
player.can_play = false
|
|
|
|
|
|
get_tree().paused = true
|
|
start_pattern()
|
|
else:
|
|
AudioServer.set_bus_effect_enabled( 0, 0, false )
|
|
AudioServer.set_bus_volume_db( 2, AudioServer.get_bus_volume_db(2)+20 )
|
|
|
|
get_tree().paused = false
|
|
player.can_play = true
|
|
player.camera.make_current()
|
|
hide()
|
|
|
|
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
|
if tween:
|
|
tween.kill()
|
|
|
|
if cpt_col == -1:
|
|
return
|
|
cpt_col/= 2
|
|
if cpt_col < 2:
|
|
frog.size = .5
|
|
elif cpt_col == 2 or cpt_col == 3:
|
|
if frog.size > .7:
|
|
frog.size = .7
|
|
else:
|
|
if frog.size > 2:
|
|
frog.size = 2
|
|
|
|
player.cpt_feather += 1
|
|
|
|
|
|
func start_pattern():
|
|
if tween:
|
|
tween.kill()
|
|
|
|
if is_playing:
|
|
tween = create_tween()
|
|
else:
|
|
return
|
|
|
|
audio_player.play()
|
|
|
|
var bottom_y = game_area.size.y - target_rect.size.y
|
|
var top_y = 0.0
|
|
|
|
tween.tween_property(target_rect, "position:y", top_y, 5) # 5
|
|
tween.tween_interval(4.0) # 4
|
|
tween.tween_property(target_rect, "position:y", bottom_y, 5) # 5
|
|
tween.tween_interval(4.0) # 4
|
|
|
|
await tween.finished
|
|
if cpt_col == -1:
|
|
cpt_col = 0
|
|
toggle_minigame()
|
|
|
|
|
|
|
|
func _process(delta):
|
|
|
|
if not is_playing:
|
|
return
|
|
|
|
# On vérifie si le centre de la plume est dans le rectangle
|
|
var feather_center = feather.position.y + (feather.size.y / 2.0)
|
|
var rect_top = target_rect.position.y
|
|
var rect_bottom = target_rect.position.y + target_rect.size.y
|
|
|
|
var is_inside = feather_center >= rect_top and feather_center <= rect_bottom
|
|
|
|
# Si elle est dehors et qu'on n'est pas déjà en train de clignoter en rouge
|
|
if not is_inside and not is_flashing and !player.can_play : # can_play juste pour le début
|
|
trigger_error()
|
|
|
|
func trigger_error():
|
|
is_flashing = true
|
|
cpt_col += 1
|
|
|
|
# Passage en rouge
|
|
target_rect.color = Color.RED
|
|
|
|
# On attend 0.5 secondes
|
|
await get_tree().create_timer(0.5).timeout
|
|
|
|
# Retour à la normale
|
|
target_rect.color = default_target_color
|
|
is_flashing = false
|