From 86af2e812a67fbbd5ebe7b50b2f01bbda7033e2c Mon Sep 17 00:00:00 2001 From: Tiger Jove Date: Fri, 23 Jan 2026 15:05:24 +0100 Subject: [PATCH] feat: prompter is now an autoload --- src/project.godot | 1 + src/ui/prompter/prompt_button.gd | 6 ++-- src/ui/prompter/prompter.gd | 51 ++++++++++++++++++++++++++------ src/ui/prompter/prompter.tscn | 51 +++++++++++++++++++------------- 4 files changed, 77 insertions(+), 32 deletions(-) diff --git a/src/project.godot b/src/project.godot index 8a714a1..e9729a0 100644 --- a/src/project.godot +++ b/src/project.godot @@ -38,6 +38,7 @@ PromptManager="*res://addons/input_prompts/input_prompt_manager.gd" Steam="*res://dev-util/steam.gd" Main="*res://singletons/main/main.tscn" I18n="*res://dev-util/i18n.gd" +P="*res://ui/prompter/prompter.tscn" [debug] diff --git a/src/ui/prompter/prompt_button.gd b/src/ui/prompter/prompt_button.gd index 026de32..5c23780 100644 --- a/src/ui/prompter/prompt_button.gd +++ b/src/ui/prompter/prompt_button.gd @@ -21,15 +21,15 @@ signal performed(action: StringName) func _ready(): self.pressed.connect(perform) action_prompt.pressed.connect(perform) - - + + func perform() -> void: performed.emit(action) func _update_action(): text = action - action_prompt.action = action + $ActionPrompt.action = action func _override_prompt(prompt: String): diff --git a/src/ui/prompter/prompter.gd b/src/ui/prompter/prompter.gd index 88ab96b..98ddaf6 100644 --- a/src/ui/prompter/prompter.gd +++ b/src/ui/prompter/prompter.gd @@ -6,12 +6,16 @@ class_name Prompter signal performed(action: String) var _prompts : Dictionary[StringName, Control] = {} +static var _instance : Prompter = null func _ready() -> void: _register_prompts() - test() + clear() func _register_prompts() -> void: + assert(not _instance, "Cannot have two prompters (are you trying to run the prompter itself?)") + _instance = self + for prompt in get_tree().get_nodes_in_group("prompts") as Array[PromptButton]: _prompts[prompt.name] = prompt prompt.get_parent().remove_child(prompt) @@ -24,10 +28,19 @@ func _perform(action : StringName): performed.emit(action) -func test() -> void: - await get_tree().create_timer(0.5).timeout - var prompts := pick("ui_cancel", "ui_accept") - show_left_bottom(prompts) +func _clear(container: Control) -> void: + for child in container.get_children(): + container.remove_child(child) + + +func _clearInteraction() -> void: + %Interaction.text = "" + %Interaction.get_parent().hide() + + +func _clearInstruction() -> void: + %Instruction.text = "" + %Instruction.get_parent().hide() func _show(container: Control, controls: Array[Control], overrides: Array[StringName] = []) -> void: @@ -38,17 +51,37 @@ func _show(container: Control, controls: Array[Control], overrides: Array[String control.appear(override) -func _clear(container: Control) -> void: - for child in container.get_children(): - container.remove_child(child) + +func test() -> void: + await get_tree().create_timer(0.5).timeout + var prompts := pick("ui_cancel", "ui_accept") + show_left_bottom(prompts) + interaction("Hello World.") + instruction("lorem ipsum dolor sit amet") + await get_tree().create_timer(2.5).timeout + clear() + +func interaction(text: String) -> void: + if not text: _clearInteraction() + %Interaction.text = text + %Interaction.get_parent().show() + + +func instruction(text: String) -> void: + if not text: _clearInstruction() + %Instruction.text = text + %Instruction.get_parent().show() func show_left_bottom(controls: Array[Control], overrides: Array[StringName] = []) -> void: _show(%LeftBottom, controls, overrides) -func clear_left_bottom() -> void: +func clear() -> void: _clear(%LeftBottom) + _clear(%RightBottom) + _clearInteraction() + _clearInstruction() ## Selects a list of up to three prompts to be passed to the show_xxxxx() functions diff --git a/src/ui/prompter/prompter.tscn b/src/ui/prompter/prompter.tscn index de127b9..3074d87 100644 --- a/src/ui/prompter/prompter.tscn +++ b/src/ui/prompter/prompter.tscn @@ -25,46 +25,56 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 theme_override_constants/margin_left = 42 theme_override_constants/margin_top = 42 theme_override_constants/margin_right = 42 theme_override_constants/margin_bottom = 42 script = ExtResource("1_ba0r8") -[node name="SafeZone" type="Control" parent="."] -layout_mode = 2 +[node name="CanvasLayer" type="CanvasLayer" parent="."] +layer = 10 + +[node name="SafeZone" type="Control" parent="CanvasLayer"] +layout_mode = 3 +anchors_preset = 0 +offset_left = 42.0 +offset_top = 42.0 +offset_right = 1878.0 +offset_bottom = 1038.0 mouse_filter = 2 -[node name="CenterContainer" type="CenterContainer" parent="SafeZone"] +[node name="CenterContainer" type="CenterContainer" parent="CanvasLayer/SafeZone"] layout_mode = 0 offset_right = 1836.0 offset_bottom = 996.0 mouse_filter = 2 -[node name="CenterZone" type="MarginContainer" parent="SafeZone/CenterContainer"] +[node name="CenterZone" type="MarginContainer" parent="CanvasLayer/SafeZone/CenterContainer"] custom_minimum_size = Vector2(700, 700) layout_mode = 2 theme_override_constants/margin_top = 42 theme_override_constants/margin_right = 42 -[node name="TopCenter" type="PanelContainer" parent="SafeZone/CenterContainer/CenterZone"] +[node name="TopCenter" type="PanelContainer" parent="CanvasLayer/SafeZone/CenterContainer/CenterZone"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 0 theme_override_styles/panel = SubResource("StyleBoxFlat_ba0r8") -[node name="Label" type="Label" parent="SafeZone/CenterContainer/CenterZone/TopCenter"] +[node name="Interaction" type="Label" parent="CanvasLayer/SafeZone/CenterContainer/CenterZone/TopCenter"] +unique_name_in_owner = true layout_mode = 2 text = "object to interact with" label_settings = SubResource("LabelSettings_fbpt0") horizontal_alignment = 1 -[node name="CenterAnchor" type="Control" parent="SafeZone/CenterContainer/CenterZone"] +[node name="CenterAnchor" type="Control" parent="CanvasLayer/SafeZone/CenterContainer/CenterZone"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 8 -[node name="Center" type="VBoxContainer" parent="SafeZone/CenterContainer/CenterZone/CenterAnchor"] +[node name="Center" type="VBoxContainer" parent="CanvasLayer/SafeZone/CenterContainer/CenterZone/CenterAnchor"] layout_mode = 1 anchors_preset = 7 anchor_left = 0.5 @@ -81,16 +91,16 @@ size_flags_vertical = 8 theme_override_constants/separation = 48 alignment = 2 -[node name="collect_memento_ui" parent="SafeZone/CenterContainer/CenterZone/CenterAnchor/Center" instance=ExtResource("5_fbpt0")] +[node name="collect_memento_ui" parent="CanvasLayer/SafeZone/CenterContainer/CenterZone/CenterAnchor/Center" instance=ExtResource("5_fbpt0")] layout_mode = 2 text = "collect_memento_ui" -[node name="option_memento_ui" parent="SafeZone/CenterContainer/CenterZone/CenterAnchor/Center" instance=ExtResource("5_fbpt0")] +[node name="option_memento_ui" parent="CanvasLayer/SafeZone/CenterContainer/CenterZone/CenterAnchor/Center" instance=ExtResource("5_fbpt0")] layout_mode = 2 text = "option_memento_ui" action = &"option_memento_ui" -[node name="Top" type="PanelContainer" parent="SafeZone"] +[node name="Top" type="PanelContainer" parent="CanvasLayer/SafeZone"] layout_mode = 1 anchors_preset = 5 anchor_left = 0.5 @@ -100,20 +110,21 @@ offset_right = 230.5 offset_bottom = 98.33334 grow_horizontal = 2 -[node name="Label" type="Label" parent="SafeZone/Top"] +[node name="Instruction" type="Label" parent="CanvasLayer/SafeZone/Top"] +unique_name_in_owner = true layout_mode = 2 text = "a general explanation or hint about what is going on -or an evaluation such as on the card-board" +or an evaluation such as on the card-boardin" horizontal_alignment = 1 -[node name="LeftBottomAnchor" type="Control" parent="SafeZone"] +[node name="LeftBottomAnchor" type="Control" parent="CanvasLayer/SafeZone"] anchors_preset = 0 offset_top = 996.0 offset_bottom = 996.0 size_flags_horizontal = 0 size_flags_vertical = 8 -[node name="LeftBottom" type="VBoxContainer" parent="SafeZone/LeftBottomAnchor"] +[node name="LeftBottom" type="VBoxContainer" parent="CanvasLayer/SafeZone/LeftBottomAnchor"] unique_name_in_owner = true layout_mode = 1 anchors_preset = 2 @@ -128,20 +139,20 @@ size_flags_vertical = 4 theme_override_constants/separation = 48 alignment = 2 -[node name="ui_accept" parent="SafeZone/LeftBottomAnchor/LeftBottom" instance=ExtResource("5_fbpt0")] +[node name="ui_accept" parent="CanvasLayer/SafeZone/LeftBottomAnchor/LeftBottom" instance=ExtResource("5_fbpt0")] layout_mode = 2 -[node name="ui_cancel" parent="SafeZone/LeftBottomAnchor/LeftBottom" instance=ExtResource("5_fbpt0")] +[node name="ui_cancel" parent="CanvasLayer/SafeZone/LeftBottomAnchor/LeftBottom" instance=ExtResource("5_fbpt0")] layout_mode = 2 text = "ui_cancel" action = &"ui_cancel" -[node name="scene_skip" parent="SafeZone/LeftBottomAnchor/LeftBottom" instance=ExtResource("5_fbpt0")] +[node name="scene_skip" parent="CanvasLayer/SafeZone/LeftBottomAnchor/LeftBottom" instance=ExtResource("5_fbpt0")] layout_mode = 2 text = "scene_skip" action = &"scene_skip" -[node name="RightBottomAnchor" type="Control" parent="SafeZone"] +[node name="RightBottomAnchor" type="Control" parent="CanvasLayer/SafeZone"] layout_mode = 1 anchors_preset = 3 anchor_left = 1.0 @@ -153,7 +164,7 @@ offset_top = -40.0 grow_horizontal = 0 grow_vertical = 0 -[node name="RightBottom" type="VBoxContainer" parent="SafeZone/RightBottomAnchor"] +[node name="RightBottom" type="VBoxContainer" parent="CanvasLayer/SafeZone/RightBottomAnchor"] unique_name_in_owner = true layout_mode = 1 anchors_preset = 3