frame-of-mind/src/logic-scenes/collectable/new_collectable_ui.gd

241 lines
8.3 KiB
GDScript3
Raw Normal View History

@tool
class_name CollectableUi extends CenterContainer
@export var has_stage: bool = false:
set(focused):
if has_stage == focused: return
if focused:
has_stage = true
is_collapsed = false
if not visible: show()
else:
has_stage = false
get_viewport().gui_release_focus()
is_collapsed = true
#@export var collapsed = true:
# set(collapse):
# if is_inside_tree() and not Engine.is_editor_hint():
# if State.reduce_motion:
# collapsed = false
# return
# if collapse and not collapsed:
# if is_inside_tree():
# _hide_buttons()
# collapsed = collapse
# elif not collapse and collapsed:
# if is_inside_tree():
# _show_buttons()
# collapsed = collapse
#
# if collapse and has_stage: State.leave_stage(self)
@export var scene: Scenes.id = Scenes.id.YOUTH_DRAEVEN:
set(id):
scene = id
if is_inside_tree() and not is_board:
match id:
Scenes.id.YOUTH_DRAEVEN:
# FIXME: this explicit translation should not be nessecary
if title_override == "": title_label.text = TranslationServer.translate("Starlight")
if subtitle_override == "": cn_label.text = "[b]%s[/b]: %s" % [TranslationServer.translate("MementoLabel_CN"), TranslationServer.translate("MementoLabel_DraevenCN")]
Scenes.id.YOUTH_CHILDHOOD:
if title_override == "": title_label.text = TranslationServer.translate("crafted Mask")
if subtitle_override == "": cn_label.text = "[b]%s[/b]: %s" % [TranslationServer.translate("MementoLabel_CN"), TranslationServer.translate("MementoLabel_ChildhoodCN")]
Scenes.id.YOUTH_VOICE_TRAINING:
if title_override == "": title_label.text = TranslationServer.translate("Comic Stash")
if subtitle_override == "": cn_label.text = "[b]%s[/b]: %s" % [TranslationServer.translate("MementoLabel_CN"), TranslationServer.translate("MementoLabel_VoiceCN")]
Scenes.id.YOUTH_JUI_JUTSU:
if title_override == "": title_label.text = TranslationServer.translate("Sports Clothes")
if subtitle_override == "": cn_label.text = "[b]%s[/b]: %s" % [TranslationServer.translate("MementoLabel_CN"), TranslationServer.translate("MementoLabel_Jui_JutsuCN")]
Scenes.id.TRANSITION:
2025-07-21 17:28:20 +00:00
if title_override == "": title_label.text = TranslationServer.translate("Move on")
if subtitle_override == "": cn_label.text = ""
2025-07-21 17:28:20 +00:00
Scenes.id.ADULT_DND:
if title_override == "": title_label.text = TranslationServer.translate("colorful Dice")
if subtitle_override == "": cn_label.text = ""
2025-07-21 17:28:20 +00:00
Scenes.id.ADULD_VOLUNTARY:
2025-07-28 22:03:46 +00:00
if title_override == "": title_label.text = TranslationServer.translate("Gemstone Art")
if subtitle_override == "": cn_label.text = ""
2025-07-21 17:28:20 +00:00
Scenes.id.ADULD_CHRISTMAS:
if title_override == "": title_label.text = TranslationServer.translate("Chat Messages")
if subtitle_override == "": cn_label.text = ""
Scenes.id.ADULT_EATING:
if title_override == "": title_label.text = TranslationServer.translate("Dishes")
if subtitle_override == "": cn_label.text = ""
Scenes.id.ADULT_UNI:
if title_override == "": title_label.text = TranslationServer.translate("Science Poster")
if subtitle_override == "": cn_label.text = ""
Scenes.id.ADULT_THERAPY:
2025-07-21 17:28:20 +00:00
if title_override == "": title_label.text = TranslationServer.translate("Doctors Note")
if subtitle_override == "": cn_label.text = ""
Scenes.id.ADULT_BURNOUT:
if title_override == "": title_label.text = TranslationServer.translate("Paperwork")
if subtitle_override == "": cn_label.text = ""
2025-07-21 17:28:20 +00:00
if not Engine.is_editor_hint():
is_collected = Scenes.is_sequence_repeating(scene)
@export var is_collected: bool = false:
set(value):
is_collected = value
if is_inside_tree():
collected_box.button_pressed = value
if is_collected and not is_board:
%CollectLabel.text = "listen again"
else:
2025-05-10 13:23:58 +00:00
if not is_board:
2025-08-17 16:34:27 +00:00
%CollectLabel.text = "MementoLabel_collect"
2025-05-10 13:23:58 +00:00
else:
%CollectLabel.text = "find connections"
@onready var collected_box: CheckBox = %CheckBox
@export var title_override: String = "":
set(value):
title_override = value
if is_inside_tree() and not is_board:
title_label.text = value
@onready var title_label: Label = %TitleLabel
@export var subtitle_override: String = "":
set(value):
subtitle_override = value
if is_inside_tree() and not is_board:
cn_label.text = value
@onready var cn_label: RichTextLabel = %ContentNoteLabel
@onready var animation_player: AnimationPlayer = %AnimationPlayer
@export var is_collapsed: bool = true
@export var is_expanded: bool = false:
set(expanded):
if expanded != is_expanded:
is_expanded = expanded
if is_inside_tree():
animation_player.play("expand")
await animation_player.animation_finished
for button:Button in [%ReadStory, %CollectButton, %SummaryButton, %SkipButton]:
if button.visible:
button.grab_focus()
return
@export var was_skipped: bool = false
@export var is_board:bool = false:
set(board):
is_board = board
if is_inside_tree():
if board:
2025-05-10 13:23:58 +00:00
if title_override == "": title_label.text = "Mind Board"
collected_box.hide()
# Not room agnostic yet!
if not Engine.is_editor_hint():
match Scenes.get_completed_total():
1:
if subtitle_override == "": cn_label.text = "Find all three Mementos to collect all thoughts."
2:
if subtitle_override == "": cn_label.text = "Find two more Mementos to get all cards."
3:
if subtitle_override == "": cn_label.text = "Find the last remaining Memento."
4:
if subtitle_override == "": cn_label.text = "Use this to find a Frame of Mind."
else:
scene = scene
collected_box.show()
2025-05-30 14:10:44 +00:00
@export var is_exit:bool = false:
set(exit):
is_exit = exit
if is_inside_tree():
if exit:
if title_override == "": title_label.text = "Move on"
if subtitle_override == "": %CollectLabel.text = "Leave room"
2025-05-30 14:10:44 +00:00
collected_box.hide()
else:
scene = scene
collected_box.show()
signal open_board
2025-05-30 14:10:44 +00:00
signal exit_room
#TODO implement proper scene skipping
signal scene_skipped(i: int)
func _ready() -> void:
State.settings_changed.connect(_on_context_updated)
%CollectButton.pressed.connect(collect_memento)
##TODO: add functions for remaining buttons
update_state()
func _on_context_updated():
%SkipButton.visible = State.allow_skipping
%SummaryButton.visible = State.provide_summaries
%ReadStory.visible = is_collected
%OptionPrompt.visible = State.allow_skipping or State.provide_summaries or is_collected and not is_board
%OptionsLabel.visible = State.allow_skipping or State.provide_summaries or is_collected and not is_board
cn_label.visible = true if State.show_content_notes else false
func update_state():
scene = scene
is_board = is_board
2025-05-30 14:10:44 +00:00
is_exit = is_exit
_on_context_updated()
func try_reveal() -> bool:
if is_exit and not State.active_save_game.is_childhood_board_complete: return false
if not visible:
update_state()
visible = true
animation_player.play("reveal")
return true
return false
#func _process(_delta: float) -> void:
# if not visible or Engine.is_editor_hint(): return
# if Input.is_action_just_pressed("collect_memento_ui"):
# if not is_board:
# collect_memento()
# else:
# open_board.emit()
# elif Input.is_action_just_pressed("option_memento_ui"):
# is_expanded = true
#FIXME something was eating all my inputs, maybe I can use the more pretty pattern when I figure out the culprit
func _input(event: InputEvent) -> void:
if not visible: return
if event.is_action_pressed("collect_memento_ui"):
2025-06-03 21:11:26 +00:00
if not is_board:
collect_memento()
get_viewport().set_input_as_handled()
else:
2025-05-30 14:10:44 +00:00
if is_board:
open_board.emit()
if is_exit:
exit_room.emit()
elif event.is_action_pressed("option_memento_ui"):
is_expanded = true
get_viewport().set_input_as_handled()
func vanish():
if not visible: return
if is_expanded:
animation_player.play("vanish_all")
else:
animation_player.play("vanish")
func collect_memento():
Scenes.start_sequence(scene)
State.leave_stage(self)
2025-06-03 21:11:26 +00:00
if scene == Scenes.id.TRANSITION: vanish()
#get_tree().call_group("scene_actors", "play_scene", scene, collected)
if was_skipped: scene_skipped.emit(-1)
is_collected = true
func _on_skip_pressed():
print("Scene skipped!")
if scene != null:
scene_skipped.emit(1)
was_skipped = true
$Panel/Content/Buttons/VBoxContainer/collect_or_listen.text = "collect (un-skip)"
State.leave_stage(self)