feat(sprint-14): add Cake cut/reset state machine

This commit is contained in:
Steven Wroblewski
2026-05-11 20:15:44 +02:00
parent 666648c154
commit 2cb265c922
2 changed files with 87 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
## 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