Files
Cozypaw-Hospital/scripts/objects/cake.gd
T
2026-05-11 20:15:44 +02:00

57 lines
1.5 KiB
GDScript

## Cake — tap to cut a slice, slice auto-respawns after a delay.
class_name Cake extends Node2D
enum State { WHOLE, CUTTING, CUT, RESETTING }
const CUT_DURATION: float = 0.3
const RESET_DURATION: float = 0.3
const RESET_DELAY: float = 3.0
const BUTTON_HALF_WIDTH: float = 40.0
const BUTTON_HALF_HEIGHT: float = 20.0
var _state: State = State.WHOLE
func _input(event: InputEvent) -> void:
if _state != State.WHOLE:
return
if not event is InputEventScreenTouch:
return
var touch: InputEventScreenTouch = event as InputEventScreenTouch
if not touch.pressed:
return
var local: Vector2 = to_local(touch.position)
if abs(local.x) > BUTTON_HALF_WIDTH or abs(local.y) > BUTTON_HALF_HEIGHT:
return
_start_cutting()
func _start_cutting() -> void:
AudioManager.play_sfx("object_tap")
_state = State.CUTTING
var slice: Node2D = get_node_or_null("Slice") as Node2D
var tween: Tween = create_tween()
if slice != null:
tween.tween_property(slice, "modulate:a", 0.0, CUT_DURATION)
tween.tween_callback(_on_cut_complete)
func _on_cut_complete() -> void:
_state = State.CUT
var tween: Tween = create_tween()
tween.tween_interval(RESET_DELAY)
tween.tween_callback(_start_reset)
func _start_reset() -> void:
_state = State.RESETTING
var slice: Node2D = get_node_or_null("Slice") as Node2D
var tween: Tween = create_tween()
if slice != null:
tween.tween_property(slice, "modulate:a", 1.0, RESET_DURATION)
tween.tween_callback(_on_reset_complete)
func _on_reset_complete() -> void:
_state = State.WHOLE