91 lines
2.6 KiB
GDScript
91 lines
2.6 KiB
GDScript
extends Node2D
|
|
|
|
const DARK_CUT_SCENE = preload("res://operation/prototype_dark_cut.tscn")
|
|
const DIALOG_BOB_SCENE = preload("res://dialog/dialog_bob.tscn")
|
|
const RITUAL_BOOK_SCENE = preload("res://ritual/prototype_ritual_book.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
|
|
|
|
func _ready():
|
|
_on_bob_clicked()
|
|
|
|
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 _on_ritual_book_clicked():
|
|
var ritual_book = RITUAL_BOOK_SCENE.instantiate()
|
|
ritual_book.incantation_completed.connect(_on_ritual_book_incantation_completed.bind(ritual_book))
|
|
add_child.call_deferred(ritual_book)
|
|
|
|
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)
|
|
|
|
func _on_map_selectable_clicked():
|
|
_disable_node2d(room)
|
|
var map: PrototypeMap = MAP_SCENE.instantiate()
|
|
map.shown_points = shown_map_points
|
|
map.dialog_triggered.connect(_on_map_dialog_triggered)
|
|
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
|
|
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()
|
|
_show_room()
|
|
|
|
func _on_dark_cut_failed(dark_cut: DarkCut):
|
|
dark_cut.queue_free()
|
|
_show_room()
|
|
|
|
func _on_ritual_book_incantation_completed(ritual_book: PrototypeRitualBook):
|
|
ritual_book.queue_free()
|
|
|
|
func _on_dialog_finished(choice_selected: String, dialog: Node):
|
|
is_dialog_shown = false
|
|
dialog.queue_free()
|
|
if choice_selected == "Approach body":
|
|
_show_dark_cut()
|
|
|
|
func _on_map_dialog_triggered(dialog_map: DialogMap):
|
|
_show_dialog(dialog_map)
|
|
|
|
func _on_map_closed(map: PrototypeMap):
|
|
map.queue_free()
|
|
_enable_node2d(room)
|