Files
frog/scripts/feather.gd
T
E250429F 3e857fa9f3 credit
2026-09-17 23:19:43 +02:00

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