Add simulated CCS computer
This commit is contained in:
@@ -29,6 +29,9 @@ const DIALOGUE_BUBBLE_VERTICAL_CHROME := 95.0
|
||||
@onready var previous_page_button: Button = $DialogueChoiceArea/ChoicePager/Previous
|
||||
@onready var page_label: Label = $DialogueChoiceArea/ChoicePager/Page
|
||||
@onready var next_page_button: Button = $DialogueChoiceArea/ChoicePager/Next
|
||||
@onready var computer_launcher: Button = $ComputerLauncher
|
||||
@onready var computer_overlay: Control = $ComputerOverlay
|
||||
@onready var computer_close_button: Button = $ComputerOverlay/Close
|
||||
|
||||
var blink_tween: Tween
|
||||
var dialogue_tween: Tween
|
||||
@@ -44,11 +47,14 @@ var dialogue_characters_per_second := 35.0
|
||||
var dialogue_reveal_complete := false
|
||||
var dialogue_layout_generation := 0
|
||||
var dialogue_input_enabled := true
|
||||
var computer_available := true
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
previous_page_button.pressed.connect(_change_choice_page.bind(-1))
|
||||
next_page_button.pressed.connect(_change_choice_page.bind(1))
|
||||
computer_launcher.pressed.connect(open_computer)
|
||||
computer_close_button.pressed.connect(close_computer)
|
||||
_update_clock()
|
||||
_schedule_patient_blink()
|
||||
hide_patient_dialogue()
|
||||
@@ -158,6 +164,8 @@ func is_patient_dialogue_visible() -> bool:
|
||||
|
||||
|
||||
func configure_interview(node: Dictionary) -> void:
|
||||
computer_available = true
|
||||
computer_launcher.visible = not computer_overlay.visible
|
||||
if debrief_panel != null and is_instance_valid(debrief_panel):
|
||||
debrief_panel.queue_free()
|
||||
debrief_panel = null
|
||||
@@ -220,6 +228,10 @@ func complete_response_transition() -> void:
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if computer_overlay.visible:
|
||||
return
|
||||
if _event_targets_computer_launcher(event):
|
||||
return
|
||||
if not dialogue_input_enabled or not dialogue_bubble.visible:
|
||||
return
|
||||
var should_advance := false
|
||||
@@ -241,6 +253,41 @@ func set_dialogue_input_enabled(enabled: bool) -> void:
|
||||
dialogue_input_enabled = enabled
|
||||
|
||||
|
||||
func open_computer() -> void:
|
||||
if not computer_available or computer_overlay.visible:
|
||||
return
|
||||
computer_overlay.visible = true
|
||||
computer_launcher.visible = false
|
||||
if dialogue_tween and dialogue_tween.is_valid():
|
||||
dialogue_tween.pause()
|
||||
computer_close_button.grab_focus()
|
||||
|
||||
|
||||
func close_computer() -> bool:
|
||||
if not computer_overlay.visible:
|
||||
return false
|
||||
computer_overlay.visible = false
|
||||
computer_launcher.visible = computer_available
|
||||
if dialogue_tween and dialogue_tween.is_valid():
|
||||
dialogue_tween.play()
|
||||
return true
|
||||
|
||||
|
||||
func is_computer_open() -> bool:
|
||||
return computer_overlay.visible
|
||||
|
||||
|
||||
func _event_targets_computer_launcher(event: InputEvent) -> bool:
|
||||
if not computer_launcher.visible:
|
||||
return false
|
||||
if event is InputEventMouseButton:
|
||||
return event.button_index == MOUSE_BUTTON_LEFT \
|
||||
and computer_launcher.get_global_rect().has_point(event.position)
|
||||
if event is InputEventScreenTouch:
|
||||
return computer_launcher.get_global_rect().has_point(event.position)
|
||||
return false
|
||||
|
||||
|
||||
func _split_dialogue_pages(text: String) -> Array[String]:
|
||||
var normalized := text.strip_edges()
|
||||
if normalized.is_empty():
|
||||
@@ -397,6 +444,9 @@ func _on_dialogue_choice_pressed(choice_id: String) -> void:
|
||||
|
||||
|
||||
func show_debrief(debrief: Dictionary, score: Dictionary) -> void:
|
||||
computer_available = false
|
||||
close_computer()
|
||||
computer_launcher.visible = false
|
||||
hide_patient_dialogue()
|
||||
hide_dialogue_choices()
|
||||
if debrief_panel != null and is_instance_valid(debrief_panel):
|
||||
|
||||
Reference in New Issue
Block a user