Untitled
Anonymous
plain_text
02/24/2026 1:11 AM
5.6 KB
14
Indexable
extends Node2D
@export var tint_alpha: float = 0.65
@export var fade_to_black_time: float = 0.6
var fade_rect: ColorRect
var main_ref: Node
var home_overlay: Control
@onready var player = $Player
@onready var cake = _get_interactable("Cake")
var interaction_locked := false
# Optional spawn (if you add Marker2D nodes)
var _spawn_from := "left"
@onready var spawn_left: Marker2D = get_node_or_null("SpawnLeft")
@onready var spawn_right: Marker2D = get_node_or_null("SpawnRight")
# Put your final text here (line-by-line)
var ending_lines: Array[String] = [
"Valahogy az egész nap egy listának indult.",
"Apró feladatok, apró kanyarok, apró \"majd mindjárt\"-ok.",
"És közben… eltelt.",
"Nem lett minden kipipálva.",
"De te itt vagy.",
"",
"„Turns out the point of the day wasn’t getting everything done. It was getting here.”",
"",
"(E)",
]
func set_spawn_from(side: String) -> void:
_spawn_from = side
func bind_ui(_d, _n, f, _i, m) -> void:
fade_rect = f
main_ref = m
if main_ref != null:
home_overlay = main_ref.get_node_or_null("UIRoot/HomeOverlay")
func _ready() -> void:
await _apply_spawn_if_present()
if cake != null and cake.has_signal("interacted"):
cake.interacted.connect(_on_cake_interacted)
else:
push_error("Home: Cake interactable not found. Name the node 'Cake' and attach Interactable.gd (or add a child named 'Interactable').")
func _get_interactable(node_name: String) -> Node:
var n := get_node_or_null(node_name)
if n == null:
return null
if n.has_signal("interacted"):
return n
var child := n.get_node_or_null("Interactable")
if child != null and child.has_signal("interacted"):
return child
return null
func _apply_spawn_if_present() -> void:
if spawn_left == null or spawn_right == null:
return
var target: Marker2D = spawn_left if _spawn_from == "left" else spawn_right
player.set_can_move(false)
var offset := Vector2(-32, 0) if _spawn_from == "left" else Vector2(32, 0)
player.global_position = target.global_position + offset
var t := create_tween()
t.tween_property(player, "global_position", target.global_position, 0.35)\
.set_trans(Tween.TRANS_SINE)\
.set_ease(Tween.EASE_OUT)
await t.finished
player.set_can_move(true)
func _on_cake_interacted() -> void:
if interaction_locked:
return
interaction_locked = true
player.set_can_move(false)
# Debounce the press that triggered interaction
await get_tree().process_frame
while Input.is_action_pressed("interact"):
await get_tree().process_frame
await _fade_tint_in()
if home_overlay == null:
push_error("Home: HomeOverlay not found at Main/UIRoot/HomeOverlay")
await _fade_tint_out()
player.set_can_move(true)
interaction_locked = false
return
home_overlay.visible = true
home_overlay.call("start", ending_lines)
# Wait for overlay to signal finished (happens on the extra E after last line)
if home_overlay.has_signal("finished"):
await home_overlay.finished
# Hide overlay and fade to full black, then quit
home_overlay.visible = false
await _fade_to_black_and_quit()
func _fade_tint_in() -> void:
if fade_rect == null:
return
fade_rect.visible = true
fade_rect.color = Color(0, 0, 0, 1)
fade_rect.modulate.a = 0.0
var t := create_tween()
t.tween_property(fade_rect, "modulate:a", tint_alpha, 0.35)\
.set_trans(Tween.TRANS_SINE)\
.set_ease(Tween.EASE_OUT)
await t.finished
func _fade_tint_out() -> void:
if fade_rect == null:
return
var t := create_tween()
t.tween_property(fade_rect, "modulate:a", 0.0, 0.35)\
.set_trans(Tween.TRANS_SINE)\
.set_ease(Tween.EASE_IN)
await t.finished
fade_rect.visible = false
func _fade_to_black_and_quit() -> void:
if fade_rect != null:
fade_rect.visible = true
fade_rect.color = Color(0, 0, 0, 1)
# Ensure we start from tint_alpha (or current), then go to 1.0
if fade_rect.modulate.a < tint_alpha:
fade_rect.modulate.a = tint_alpha
var t := create_tween()
t.tween_property(fade_rect, "modulate:a", 1.0, fade_to_black_time)\
.set_trans(Tween.TRANS_SINE)\
.set_ease(Tween.EASE_IN)
await t.finished
# Small debounce so the same keypress doesn't immediately affect quitting hooks
await get_tree().process_frame
if main_ref != null and main_ref.has_method("quit_game"):
main_ref.quit_game()
else:
get_tree().quit()Editor is loading...
Leave a Comment