Untitled
Anonymous
plain_text
02/22/2026 9:37 PM
8.4 KB
13
Indexable
extends Node2D
@export var guard_portrait: Texture2D
@export var proxy_icon: Texture2D # entrance pass icon
var dialogue_ui
var note_ui
var fade_rect
var item_get_overlay
var main_ref
@onready var player = $Player
@onready var guard_eicon: CanvasItem = get_node_or_null("BiztonsagiOr/EIcon")
@onready var exit_eicon: CanvasItem = get_node_or_null("ExitToHub/EIcon")
@onready var guard = _get_guard_interactable()
@onready var exit_to_hub = _get_exit_interactable()
var has_proxy := false
var _spawn_from := "left"
@onready var spawn_left: Marker2D = get_node_or_null("SpawnLeft")
@onready var spawn_right: Marker2D = get_node_or_null("SpawnRight")
func set_spawn_from(side: String) -> void:
_spawn_from = side
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
func _ready() -> void:
await _apply_spawn_if_present()
if guard != null:
guard.interacted.connect(_on_guard_interacted)
else:
push_error("BankCenter: BiztonsagiOr interactable not found.")
if exit_to_hub != null:
exit_to_hub.interacted.connect(_on_exit_to_hub)
if exit_eicon:
exit_eicon.visible = false
func _get_guard_interactable() -> Node:
var n := get_node_or_null("BiztonsagiOr")
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 _get_exit_interactable() -> Node:
var n := get_node_or_null("ExitToHub")
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 := spawn_left if _spawn_from == "left" else spawn_right
player.set_can_move(false)
player.global_position = target.global_position
await get_tree().create_timer(0.2).timeout
player.set_can_move(true)
# -------------------------------------------------
# Dialogue connection helper
# -------------------------------------------------
func _connect_choice_once(handler: Callable) -> void:
if dialogue_ui.choice_selected.is_connected(handler):
dialogue_ui.choice_selected.disconnect(handler)
dialogue_ui.choice_selected.connect(handler, CONNECT_ONE_SHOT)
# -------------------------------------------------
# Entry
# -------------------------------------------------
func _on_guard_interacted() -> void:
if has_proxy:
dialogue_ui.show_dialogue(
"Biztonsági őr",
"„Szia!”\nMosolyog.\n„Most már hivatalos ember vagy.”\n„Laminált.”",
guard_portrait,
[]
)
return
player.set_can_move(false)
dialogue_ui.show_dialogue(
"Biztonsági őr",
"Rád néz, majd a nyakad környékére.\n„Hol a kártyád?”\n„Mert az arcod ismerős, de a nyakad üres.”",
guard_portrait,
[
{"label": "Fent dolgozom a kilencediken."},
{"label": "Csak a kondiba mennék le."},
{"label": "Elhagytam."},
{"label": "Nem is volt."}
]
)
_connect_choice_once(_first_choice)
func _first_choice(i: int) -> void:
match i:
0:
_second_stage("„Kilencedik…”\nElgondolkodik.\n„Ott van az a filmes iroda, ugye?”")
1:
_second_stage("„A kondi jó.”\n„Ott mindig szól a zene, de senki nem mosolyog.”")
2:
_second_stage("„Elhagytad?”\n„Az baj.”\n„A kártyák nem szeretnek egyedül lenni.”")
3:
_second_stage("„Nem volt?”\n„Akkor ez most egy eredettörténet.”")
func _second_stage(prompt: String) -> void:
dialogue_ui.show_dialogue(
"Biztonsági őr",
prompt + "\n„Na várj.”\n„Teszt.”",
guard_portrait,
[
{"label": "Warner Bros."},
{"label": "Grafikus vagyok."},
{"label": "A kilencedik emeleten balra."},
{"label": "Nem tudom, csak dolgozom."}
]
)
_connect_choice_once(_third_choice)
func _third_choice(i: int) -> void:
match i:
0:
_final_stage("Felcsillan a szeme.\n„Tudtam!”\n„Ott mindig jók a plakátok.”")
1:
_final_stage("„Grafikus?”\n„Akkor te csinálod azokat a dolgokat, amiket nézek, de nem értek.”")
2:
_final_stage("„Balra.”\nBólint.\n„Aki balra megy, az ritkán téved.”")
3:
_second_stage("„Nem tudom” nem válasz.”)
func _final_stage(prompt: String) -> void:
dialogue_ui.show_dialogue(
"Biztonsági őr",
prompt + "\n„Figyelj.”\n„Csinálok neked egy újat.”",
guard_portrait,
[
{"label": "Köszönöm."},
{"label": "Ígérem, nem hagyom el."},
{"label": "Most már laminált leszek én is."}
]
)
_connect_choice_once(_grant_proxy)
func _grant_proxy(i: int) -> void:
has_proxy = true
GameState.unlock_foxpost = true # example progression
dialogue_ui.show_dialogue(
"Biztonsági őr",
"Elővesz egy nyakpántot.\nKomolyan koncentrál, mintha űrhajót szerelne.\n„Na.”\n„Most már hivatalos.”\nA kezedbe ad egy belépőkártyát.",
guard_portrait,
[]
)
while dialogue_ui.is_typing():
await get_tree().process_frame
await _play_item_get_sequence(proxy_icon)
dialogue_ui.hide_dialogue()
if exit_eicon:
exit_eicon.visible = true
player.set_can_move(true)
# -------------------------------------------------
# Exit
# -------------------------------------------------
func _on_exit_to_hub() -> void:
if not has_proxy:
return
main_ref.go_hub("left")
# -------------------------------------------------
# Reward animation
# -------------------------------------------------
func _play_item_get_sequence(texture: Texture2D) -> void:
if fade_rect == null or item_get_overlay == null:
return
var icon := item_get_overlay.get_node("Center/ItemIcon") as TextureRect
if icon == null:
return
fade_rect.visible = true
fade_rect.modulate.a = 0.0
item_get_overlay.visible = true
icon.visible = true
icon.texture = texture
icon.modulate = Color(1,1,1,0)
var t := create_tween()
t.tween_property(fade_rect, "modulate:a", 1.0, 0.25)
await t.finished
var t2 := create_tween()
t2.tween_property(icon, "modulate:a", 1.0, 0.2)
await t2.finished
await get_tree().create_timer(0.4).timeout
var t3 := create_tween()
t3.tween_property(icon, "modulate:a", 0.0, 0.2)
await t3.finished
item_get_overlay.visible = false
var t4 := create_tween()
t4.tween_property(fade_rect, "modulate:a", 0.0, 0.25)
await t4.finished
fade_rect.visible = falseEditor is loading...
Leave a Comment