93 lines
2.3 KiB
GDScript
93 lines
2.3 KiB
GDScript
extends Node2D
|
|
|
|
@onready var area = $ClickArea
|
|
@onready var arrow = $Arrow
|
|
|
|
var respawn_timer: Timer
|
|
var original_y: float = 0.0
|
|
|
|
func _ready():
|
|
area.input_event.connect(_on_area_input_event)
|
|
area.mouse_entered.connect(_on_mouse_entered)
|
|
area.mouse_exited.connect(_on_mouse_exited)
|
|
|
|
# Create the respawn timer
|
|
respawn_timer = Timer.new()
|
|
respawn_timer.one_shot = true
|
|
respawn_timer.timeout.connect(_on_respawn_timer_timeout)
|
|
add_child(respawn_timer)
|
|
|
|
func _on_area_input_event(_viewport, event, _shape_idx):
|
|
if event is InputEventMouseButton:
|
|
if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
|
|
on_clicked()
|
|
|
|
func _on_mouse_entered():
|
|
Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND)
|
|
|
|
func _on_mouse_exited():
|
|
Input.set_default_cursor_shape(Input.CURSOR_ARROW)
|
|
|
|
func on_clicked():
|
|
Audio.play_chop_sound()
|
|
Inventory.add_wood(Unlocks.get_wood_per_click())
|
|
play_pop_animation()
|
|
|
|
func play_pop_animation():
|
|
arrow.visible = false
|
|
|
|
# Store original position for reset
|
|
original_y = position.y
|
|
|
|
# Create a tween for smooth animation
|
|
var tween = create_tween()
|
|
tween.set_parallel(true) # Run animations simultaneously
|
|
|
|
# Scale up quickly (pop effect)
|
|
tween.tween_property(self, "scale", scale * 1.3, 0.1).set_ease(Tween.EASE_OUT)
|
|
|
|
# Fade out
|
|
tween.tween_property(self, "modulate:a", 0.0, 0.2)
|
|
|
|
# Optional: slight upward movement for extra effect
|
|
tween.tween_property(self, "position:y", position.y - 3, 0.2)
|
|
|
|
# Hide and disable, then start respawn timer
|
|
tween.finished.connect(func():
|
|
visible = false
|
|
area.monitoring = false
|
|
area.monitorable = false
|
|
|
|
# Start the respawn timer with the value from Unlocks
|
|
var respawn_time = Unlocks.get_wood_respawn_time()
|
|
respawn_timer.start(respawn_time)
|
|
)
|
|
|
|
func _on_respawn_timer_timeout():
|
|
pop_back_in()
|
|
|
|
func pop_back_in():
|
|
if visible:
|
|
return # Already visible
|
|
|
|
position.y = original_y
|
|
|
|
# Reset properties
|
|
visible = true
|
|
arrow.visible = true
|
|
area.monitoring = true
|
|
area.monitorable = true
|
|
|
|
# Create a tween for the pop-in animation
|
|
var tween = create_tween()
|
|
tween.set_parallel(true)
|
|
|
|
# Start from scaled down and transparent
|
|
scale = Vector2.ONE * 0.7
|
|
modulate.a = 0.0
|
|
|
|
# Scale up to normal
|
|
tween.tween_property(self, "scale", Vector2.ONE, 0.2).set_ease(Tween.EASE_OUT)
|
|
|
|
# Fade in
|
|
tween.tween_property(self, "modulate:a", 1.0, 0.2)
|