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