extends Node2D const DARK_CUT_SCENE = preload("res://operation/prototype_dark_cut.tscn") const DIALOG_BOB_SCENE = preload("res://dialog/dialog_bob.tscn") const MAP_SCENE = preload("res://map/prototype_map.tscn") @onready var room: Node2D = $Room var shown_map_points: Array[int] = [0] var is_dialog_shown = false var map_precondition: String: set(new_value): if map_precondition == "dark_cut_completed" and not new_value: (get_node("PrototypeMap") as PrototypeMap).show_map_point([1]) map_precondition = new_value func _on_bob_clicked(): var dialog_bob = DIALOG_BOB_SCENE.instantiate() _disable_node2d(room) dialog_bob.dialog_finished.connect(func(choice): _enable_node2d(room) ) _show_dialog(dialog_bob) func _show_dark_cut(): _disable_node2d(room) var dark_cut = DARK_CUT_SCENE.instantiate() dark_cut.succeeded.connect(_on_dark_cut_succeeded.bind(dark_cut)) dark_cut.failed.connect(_on_dark_cut_failed.bind(dark_cut)) add_child.call_deferred(dark_cut) move_child.call_deferred($Suitcase, -1) func _on_map_selectable_clicked(): var map: PrototypeMap = MAP_SCENE.instantiate() map.shown_points = shown_map_points map.dialog_triggered.connect(_on_map_dialog_triggered.bind(map)) map.shown_points_changed.connect(func(value): shown_map_points = value) map.map_closed.connect(_on_map_closed.bind(map)) add_child.call_deferred(map) func _disable_node2d(node: Node2D): node.hide() node.set_deferred("process", false) func _enable_node2d(node: Node2D): node.show() node.set_deferred("process", true) func _show_room(): _enable_node2d(room) func _show_dialog(dialog): if is_dialog_shown: return is_dialog_shown = true _disable_node2d(room) dialog.dialog_finished.connect(_on_dialog_finished.bind(dialog)) dialog.text_box_label = %TextBoxLabel if "choice_1_button" in dialog: dialog.choice_1_button = %Choice1 if "choice_2_button" in dialog: dialog.choice_2_button = %Choice2 add_child.call_deferred(dialog) func _on_dark_cut_succeeded(dark_cut: DarkCut): dark_cut.queue_free() map_precondition = "" _show_room() func _on_dark_cut_failed(dark_cut: DarkCut): dark_cut.queue_free() _show_room() func _on_dialog_finished(choice_selected: String, dialog: Node): is_dialog_shown = false dialog.queue_free() _enable_node2d(room) if choice_selected == "Approach body": _show_dark_cut() func _on_map_dialog_triggered(dialog_map: DialogMap, map_points_to_show: Array[int], precondition: String, map: PrototypeMap): _show_dialog(dialog_map) if not precondition: map.show_map_point(map_points_to_show) else: map_precondition = precondition func _on_map_closed(map: PrototypeMap): map.queue_free() _enable_node2d(room)