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