Untitled

Anonymous
plain_text
02/22/2026 7:20 PM
14.7 KB
11
Indexable
extends Node2D

@export var oldlady_portrait: Texture2D
@export var spare_key_icon: Texture2D

var dialogue_ui
var note_ui
var fade_rect
var item_get_overlay
var item_icon_rect: TextureRect
var main_ref

@onready var player = $Player
@onready var oldlady = $OldLady

@onready var oldlady_eicon: CanvasItem = $OldLady/EIcon
@onready var exit_eicon: CanvasItem = $ExitToHub/EIcon

@onready var exit_to_hub = _get_exit_interactable()

var has_key := false

func _get_exit_interactable() -> Node:
	var n := get_node_or_null("ExitToHub")
	if n == null:
		return null
	# If ExitToHub itself is an Interactable
	if n.has_signal("interacted"):
		return n
	# Or if it has an Interactable child
	var child := n.get_node_or_null("Interactable")
	if child != null and child.has_signal("interacted"):
		return child
	return null

func bind_ui(d, n, f, i, m) -> void:
	dialogue_ui = d
	note_ui = n
	fade_rect = f
	item_get_overlay = i
	main_ref = m

	if item_get_overlay != null:
		item_icon_rect = item_get_overlay.get_node("Center/ItemIcon") as TextureRect

func _ready() -> void:
	oldlady.interacted.connect(_on_oldlady_interacted)

	if exit_to_hub != null:
		exit_to_hub.interacted.connect(_on_exit_to_hub_interacted)
	else:
		push_error("ExitToHub: No Interactable found.")

	# Exit prompt hidden until key is obtained
	if exit_eicon:
		exit_eicon.visible = false

func _on_exit_to_hub_interacted() -> void:
	if not has_key:
		return

	if exit_eicon:
		exit_eicon.visible = false

	# Corridor -> Hub should enter hub from LEFT
	if main_ref != null and main_ref.has_method("go_hub"):
		main_ref.go_hub("left")
	else:
		push_error("Corridor_Gang: main_ref.go_hub missing")

# -------------------------------------------------
# Choice connection helper (prevents double replies)
# -------------------------------------------------
func _connect_choice_once(handler: Callable) -> void:
	if dialogue_ui == null:
		push_error("Corridor_Gang: dialogue_ui is null (bind_ui not called?)")
		return
	if dialogue_ui.choice_selected.is_connected(handler):
		dialogue_ui.choice_selected.disconnect(handler)
	dialogue_ui.choice_selected.connect(handler, CONNECT_ONE_SHOT)

# -------------------------------------------------
# Item get sequence: fade out -> icon glow -> fade in
# -------------------------------------------------
func _play_item_get_sequence(texture: Texture2D) -> void:
	if fade_rect == null or item_get_overlay == null or item_icon_rect == null:
		push_error("Corridor_Gang: Missing fade_rect / item_get_overlay / item_icon_rect")
		return
	if texture == null:
		push_error("Corridor_Gang: Item texture is null")
		return

	player.set_can_move(false)

	fade_rect.visible = true
	fade_rect.modulate.a = 0.0

	item_get_overlay.visible = true
	item_icon_rect.visible = true
	item_icon_rect.texture = texture
	item_icon_rect.modulate = Color(1, 1, 1, 0)
	item_icon_rect.scale = Vector2(1.0, 1.0)

	var t := create_tween()
	t.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS)
	t.tween_property(fade_rect, "modulate:a", 1.0, 0.25).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
	await t.finished

	var t2 := create_tween()
	t2.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS)

	t2.tween_property(item_icon_rect, "modulate:a", 1.0, 0.18).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
	t2.parallel().tween_property(item_icon_rect, "scale", Vector2(1.12, 1.12), 0.18).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
	t2.tween_property(item_icon_rect, "scale", Vector2(1.0, 1.0), 0.18).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)

	t2.tween_property(item_icon_rect, "scale", Vector2(1.16, 1.16), 0.20).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
	t2.tween_property(item_icon_rect, "scale", Vector2(1.0, 1.0), 0.20).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)

	t2.tween_interval(0.25)
	t2.tween_property(item_icon_rect, "modulate:a", 0.0, 0.20).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)
	await t2.finished

	item_icon_rect.visible = false
	item_get_overlay.visible = false

	var t3 := create_tween()
	t3.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS)
	t3.tween_property(fade_rect, "modulate:a", 0.0, 0.25).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)
	await t3.finished

	fade_rect.visible = false
	player.set_can_move(true)

# --------------------------
# Entry point
# --------------------------
func _on_oldlady_interacted() -> void:
	if has_key:
		return
	_start_gate()

func _start_gate() -> void:
	player.set_can_move(false)

	dialogue_ui.show_dialogue(
		"Ibolya néni",
		"„Na. Megjött.”\n„Akkor mondja, mit akar.”",
		oldlady_portrait,
		[
			{"label": "Jó reggelt."},
			{"label": "Sietek."},
			{"label": "Itt lakom."},
			{"label": "Csak észrevétlenül távoznék."}
		]
	)

	_connect_choice_once(_gate_choice)

func _gate_choice(index: int) -> void:
	match index:
		0: _branch_good_morning()
		1: _branch_hurry()
		2: _branch_i_live_here()
		3: _branch_leave_unnoticed()

func _branch_good_morning() -> void:
	dialogue_ui.show_dialogue(
		"Ibolya néni",
		"„Jó reggelt?”\nMegforgatja a szót, mintha méreg lenne.\n„Minden reggelt, ami Isten kegyelmével életben találja az embert ki kell érdemelni.”\n„Indokolja meg, miért tartózkodik a folyosón.”",
		oldlady_portrait,
		[
			{"label": "Itt lakom?"},
			{"label": "A sarokban levő növény egész éjjel magához szólított."},
			{"label": "Elfogyott odabent a levegő."},
			{"label": "Takarítani jöttem a folyosó közös részét. De előtte dolgom van."}
		]
	)
	_connect_choice_once(_good_morning_choice)

func _good_morning_choice(i: int) -> void:
	match i:
		0:
			_return_to_gate("„Attól még hogy itt van egy ideje, ez nem biztos.”\n„Lakcímkártyát láttam már. Embert kevesebbet.”\n„Próbáld újra.”")
		1:
			_return_to_gate("„Ne humorizáljon.”\n„A vicceskedéssel jutnak be a betörők is az épületbe.”\n„Próbáld újra.”")
		2:
			_return_to_gate("A LEVEGŐ??\n“A levegő is társasházi tulajdon, remélem tudja.”\n“Próbáld újra.”")
		3:
			_midpoint_to_key("„Dolga.”\nBólint, mint aki jegyzőkönyvet vezet fejben.\n„Sorolja fel. Pontosan. Időrendben.”")

func _branch_hurry() -> void:
	dialogue_ui.show_dialogue(
		"Ibolya néni",
		"„Siet?”\nFelhúzza a szemöldökét.\n„A sietség a hibák melegágya.”\n„És a hibák mindig valakinél landolnak.”\n„Mi ennyire sürgős?”",
		oldlady_portrait,
		[
			{"label": "A busz nem vár meg."},
			{"label": "Időre megyek."},
			{"label": "Az élet halad."},
			{"label": "Nem akarok beszélgetni."}
		]
	)
	_connect_choice_once(_hurry_choice)

func _hurry_choice(i: int) -> void:
	match i:
		0:
			_midpoint_to_key("„A busz.”\n„A busz menetrend szerint jár.”\n„Az ember ritkán.”\n„Melyik?”")
		1:
			_midpoint_to_key("„Idő.”\n„Az idő relatív.”\n„A számonkérés nem.”\n„Hova?”")
		2:
			_return_to_gate("„Az élet halad.”\n„Igen.”\n„De mindjárt megállítom én magának..”\n„Próbáljd újra.”")
		3:
			_return_to_gate("Megdermed.\n„A beszélgetés közösség.”\n„A közösség erő.”\n„Ne gyengítse.”\n„Próbálja újra.”")

func _branch_i_live_here() -> void:
	dialogue_ui.show_dialogue(
		"Ibolya néni",
		"„Itt lakik.”\nÖsszeszűkíti a szemét.\n„Mondjon egy dolgot, amit csak az tud, aki valóban itt él.”",
		oldlady_portrait,
		[
			{"label": "A félemeleti építkezés csak legenda."},
			{"label": "A lépcsőháznak saját szaga van."},
			{"label": "Mindig van szórólap, amit senki nem olvas."},
			{"label": "Az előtér a pletyka epicentruma."}
		]
	)
	_connect_choice_once(_live_here_choice)

func _live_here_choice(i: int) -> void:
	match i:
		0:
			_return_to_gate("„Építik azt.”\n„De hogy be is fejezik-e?..”\n„Próbáld újra.”")
		1:
			_midpoint_to_key("Mélyet szippant a levegőbe.\n„Igen.”\n„Enyhe töltött káposzta, por és üvegvisszaváltás.”\n„Rendben.”\n„Mi a terve ma?”")
		2:
			_return_to_gate("„És magát nem érdeklik a szórólapok?”\n„Az érdektelenség az első lépés a bűnözés felé.”\n„Próbáld újra.”")
		3:
			_return_to_gate("„A pletyka intézmény.”\n„Nem játék.”\n„Próbáld újra.”")

func _branch_leave_unnoticed() -> void:
	dialogue_ui.show_dialogue(
		"Ibolya néni",
		"„Észrevétlenül?”\nLassan végigmér.\n„Ebben a házban semmi nem észrevétlen.”\n„Még a huzatnak is neve van.”\n„Mit akar, hogy ne vegyenek észre?”",
		oldlady_portrait,
		[
			{"label": "Hogy sietek."},
			{"label": "Hogy hogy nincs kedvem beszélgetni."},
			{"label": "Csak hogy leugrom a boltba."},
			{"label": "Semmit. Csak nem akarok jelentős lenni."}
		]
	)
	_connect_choice_once(_unnoticed_choice)

func _unnoticed_choice(i: int) -> void:
	match i:
		0:
			_return_to_gate("„Siet.”\n„Mindig mindenki siet.”\n„Aztán visszajönnek ide panaszkodni. Hova siet ennyire?”")
		1:
			_midpoint_to_key("Nincs kedve beszélgetni?\n„Az baj.”\n„A közösség nem kívánságműsor.”\n„Hova megy ilyen nagy hallgatással?”")
		2:
			_midpoint_to_key("„Boltba.”\n„Melyikbe?”\n„Ne mondja, hogy mindegy.”")
		3:
			_return_to_gate("Csak menne.\n„Na így nem.”\n„Itt minden mozgásnak oka van.”\n„Próbáld újra.”")

func _return_to_gate(reply: String) -> void:
	dialogue_ui.show_dialogue(
		"Ibolya néni",
		reply,
		oldlady_portrait,
		[
			{"label": "Jó. Még egyszer."},
			{"label": "Vissza."}
		]
	)
	_connect_choice_once(_return_choice)

func _return_choice(i: int) -> void:
	_start_gate()

func _midpoint_to_key(prompt: String) -> void:
	dialogue_ui.show_dialogue(
		"Ibolya néni",
		prompt + "\nKözelebb hajol.\n„Utolsó kérdés.”\n„És most ne játsszon.”",
		oldlady_portrait,
		[
			{"label": "Nem hozok fel senkit"},
			{"label": "Nem lesz zaj."},
			{"label": "Nem kerül szóba a nevem."},
			{"label": "Visszajövök időben."}
		]
	)
	_connect_choice_once(_final_question_choice)

func _final_question_choice(i: int) -> void:
	match i:
		0:
			_grant_key()
		1:
			_grant_key()
		2:
			_return_to_gate("„A név mindig szóba kerül.”\n„Főleg, ha valaki azt hiszi, nem.”\n„Próbáld újra.”")
		3:
			_return_to_gate("„Időben?”\n„Az mit jelent magánál?”\n„Próbáld újra.”")

func _grant_key() -> void:
	if has_key:
		dialogue_ui.show_dialogue(
			"Ibolya néni",
			"„Már odaadtam a kulcsot.”\n„Menjen. Mielőtt meggondolom magam.”",
			oldlady_portrait,
			[]
		)
		player.set_can_move(true)
		return

	has_key = true
	GameState.unlock_aurora = true
	GameState.unlock_corridor = true

	dialogue_ui.show_dialogue(
		"Ibolya néni",
		"Nagyot sóhajt, mintha valami megterhelőt kellett volna csinálnia.\n„Jól van.”\nA köténye zsebéből előhúz egy **kulcsot**.\n„Ezt az ajtója előtt találtam, egy cetlivel amire az volt ráírva -KERESD A SARKI FÉNYT-.”\n„Ha elhagyja, én fogom megtalálni. De magát, nem a kulcsot.”\n„Na menjen már. És ne csapja be az ajtót.”",
		oldlady_portrait,
		[]
	)

	await _play_item_get_sequence(spare_key_icon)

	if dialogue_ui:
		dialogue_ui.hide_dialogue()

	if oldlady_eicon:
		oldlady_eicon.visible = false

	if exit_eicon:
		exit_eicon.visible = true

	player.set_can_move(true)
Editor is loading...
Leave a Comment