## 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