From a88b015faa4d81c4a060e226d965a895ac172de3 Mon Sep 17 00:00:00 2001 From: Oier Bravo Urtasun Date: Sun, 21 Sep 2025 02:55:22 +0200 Subject: [PATCH 1/4] hide tooltips while speaking. Abstract ItemComponent, clean up, gitignore addons. Default font. Fixes #138 #130 --- .gitignore | 4 ++ .../rtmi_dialog_simple.gd | 16 ++++++-- .../theme.tres | 8 ++-- .../types/floating.gd | 3 +- .../fonts/caslonantique.tres | 11 ------ .../fonts/caslonantique.ttf | Bin 147756 -> 0 bytes .../fonts/determination.ttf | Bin 150948 -> 0 bytes .../inventory/inventory_ui.gd | 35 +++--------------- .../item_components/ESCItemComponent.gd | 15 ++++---- .../theme/menu.tres | 6 +-- .../theme/ui.tres | 8 +--- 11 files changed, 35 insertions(+), 71 deletions(-) delete mode 100644 addons/escoria-ui-return-monkey-island/fonts/caslonantique.tres delete mode 100755 addons/escoria-ui-return-monkey-island/fonts/caslonantique.ttf delete mode 100644 addons/escoria-ui-return-monkey-island/fonts/determination.ttf diff --git a/.gitignore b/.gitignore index 81e43c2a..00643a1a 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,7 @@ bin addons/escoria-core/default_bus_layout.tres .idea/ + +# Optional Addons per environment. +addons/godot-plugin-refresher/ +addons/script-ide/ diff --git a/addons/escoria-ui-return-monkey-island-dialog-simple/rtmi_dialog_simple.gd b/addons/escoria-ui-return-monkey-island-dialog-simple/rtmi_dialog_simple.gd index f15d020b..f55471cb 100644 --- a/addons/escoria-ui-return-monkey-island-dialog-simple/rtmi_dialog_simple.gd +++ b/addons/escoria-ui-return-monkey-island-dialog-simple/rtmi_dialog_simple.gd @@ -36,7 +36,7 @@ func _ready() -> void: # - type: required type # *Returns* Whether the type is supported or not func has_type(type: String) -> bool: - return true if type in ["floating"] else false + return true if type == "floating" else false # Check whether a specific chooser type is supported by the # dialog plugin @@ -142,11 +142,13 @@ func _on_say_finished(): _is_saying = false - say_finished.emit() + _dialog_player.say_finished.emit() + escoria.game_scene.show_tooltips() + func _on_say_visible(): - say_visible.emit() + escoria.game_scene.hide_tooltips() # Present an option chooser to the player and sends the signal @@ -159,12 +161,15 @@ func _on_say_visible(): func choose(dialog_player: Node, dialog: ESCDialog, type: String): _dialog_player = dialog_player - escoria.game_scene.close_inventory() state_machine.states_map["choices"].initialize(dialog_player, self, dialog, type) state_machine._change_state("choices") + func do_choose(dialog_player: Node, dialog: ESCDialog, type: String = "simple"): + escoria.game_scene.hide_tooltips() + + var chooser if type == "simple" or type == "": @@ -178,11 +183,14 @@ func do_choose(dialog_player: Node, dialog: ESCDialog, type: String = "simple"): var option = await chooser.option_chosen dialog_player.remove_child(chooser) + # MODIFIED FOR RETURN TO MONKEY UI if option is ESCDialogOption: escoria.globals_manager.set_global("ESC_DIALOG_CHOSEN_OPTION", option.option) # END MODIFIED FOR RETURN TO MONKEY UI option_chosen.emit(option) + escoria.game_scene.hide_tooltips() + # Trigger running the dialogue faster func speedup(): diff --git a/addons/escoria-ui-return-monkey-island-dialog-simple/theme.tres b/addons/escoria-ui-return-monkey-island-dialog-simple/theme.tres index 28a41017..a5040ba3 100644 --- a/addons/escoria-ui-return-monkey-island-dialog-simple/theme.tres +++ b/addons/escoria-ui-return-monkey-island-dialog-simple/theme.tres @@ -1,6 +1,4 @@ -[gd_resource type="Theme" load_steps=5 format=3 uid="uid://dlo07cyfhpilq"] - -[ext_resource type="FontFile" uid="uid://dfs4e42nd215" path="res://addons/escoria-ui-return-monkey-island/fonts/determination.ttf" id="1_yc5i3"] +[gd_resource type="Theme" load_steps=4 format=3 uid="uid://dlo07cyfhpilq"] [sub_resource type="StyleBoxFlat" id="1"] content_margin_left = 4.0 @@ -36,9 +34,9 @@ Label/colors/font_color = Color(1, 1, 1, 1) Label/colors/font_color_shadow = Color(0, 0, 0, 0) Label/colors/font_outline_modulate = Color(1, 0, 0, 1) Label/colors/label_box_bg = Color(0, 0, 0, 0.745098) -Label/fonts/font = ExtResource("1_yc5i3") +Label/fonts/font = null Label/styles/normal = SubResource("1") RichTextLabel/font_sizes/font_size = 20 -RichTextLabel/fonts/normal_font = ExtResource("1_yc5i3") +RichTextLabel/fonts/normal_font = null RichTextLabel/styles/focus = SubResource("2") RichTextLabel/styles/normal = SubResource("3") diff --git a/addons/escoria-ui-return-monkey-island-dialog-simple/types/floating.gd b/addons/escoria-ui-return-monkey-island-dialog-simple/types/floating.gd index cecba6f5..ee7516fd 100644 --- a/addons/escoria-ui-return-monkey-island-dialog-simple/types/floating.gd +++ b/addons/escoria-ui-return-monkey-island-dialog-simple/types/floating.gd @@ -121,6 +121,7 @@ func say(character: String, line: String) : _current_line = line show() + say_visible.emit() _is_speeding_up = false @@ -215,8 +216,6 @@ func _on_dialog_line_typed(object, key): $Timer.start(time_to_disappear) $Timer.timeout.connect(_on_dialog_finished) - say_visible.emit() - func _calculate_time_to_disappear() -> float: return (_get_number_of_words() / _reading_speed_in_wpm as float) * 60 diff --git a/addons/escoria-ui-return-monkey-island/fonts/caslonantique.tres b/addons/escoria-ui-return-monkey-island/fonts/caslonantique.tres deleted file mode 100644 index fc56b5d7..00000000 --- a/addons/escoria-ui-return-monkey-island/fonts/caslonantique.tres +++ /dev/null @@ -1,11 +0,0 @@ -[gd_resource type="FontFile" load_steps=2 format=3 uid="uid://cne31d6e0513y"] - -[ext_resource type="FontFile" uid="uid://dbuthr0652qv7" path="res://addons/escoria-ui-return-monkey-island/fonts/caslonantique.ttf" id="1"] - -[resource] -fallbacks = Array[Font]([ExtResource("1")]) -cache/0/16/0/ascent = 0.0 -cache/0/16/0/descent = 0.0 -cache/0/16/0/underline_position = 0.0 -cache/0/16/0/underline_thickness = 0.0 -cache/0/16/0/scale = 1.0 diff --git a/addons/escoria-ui-return-monkey-island/fonts/caslonantique.ttf b/addons/escoria-ui-return-monkey-island/fonts/caslonantique.ttf deleted file mode 100755 index eec6f639fb4e48abb98604096bb232ff8dfb3614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147756 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�rtOkb4o0e6w_BFhkz*mcd)4H@^OrS6_O`#XA?r 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
Ni*QpS`6){V0Fi3O3K)H^?_$OI{+~PYK?k(V#fx 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 diff --git a/addons/escoria-ui-return-monkey-island/fonts/determination.ttf b/addons/escoria-ui-return-monkey-island/fonts/determination.ttf deleted file mode 100644 index 69e732bba7bd845586f1859239f0390692dd93aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150948 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 void: - super._ready() - #$FloatingInventory/panel.position.x = ProjectSettings.get_setting("display/window/size/viewport_width") - $FloatingInventory/panel.size.x - - -func show_inventory(): - #$FloatingInventory/panel.show() - self.show() - inventory_visible = true - - -func hide_inventory(): - #$FloatingInventory/panel.hide() - self.hide() - inventory_visible = false - - func show_ui(): - #$FloatingInventory/inventory_bg.show() - #$FloatingInventory/panel/MarginContainer/ScrollContainer/container.show() self.show() - inventory_visible = true - func hide_ui(): self.hide() - #$FloatingInventory/inventory_bg.hide() - #$FloatingInventory/panel/MarginContainer/ScrollContainer/container.hide() - inventory_visible = false + +func show_inventory(): + show_ui() + +func hide_inventory(): + hide_ui() \ No newline at end of file diff --git a/addons/escoria-ui-return-monkey-island/item_components/ESCItemComponent.gd b/addons/escoria-ui-return-monkey-island/item_components/ESCItemComponent.gd index c6eae3bb..e274f150 100644 --- a/addons/escoria-ui-return-monkey-island/item_components/ESCItemComponent.gd +++ b/addons/escoria-ui-return-monkey-island/item_components/ESCItemComponent.gd @@ -1,13 +1,12 @@ -extends Node -class_name ESCItemComponent +@abstract class_name ESCItemComponent extends Node var _custom_data: Dictionary -func get_global_id(): - return self.get_parent().global_id +@abstract +func get_component_type() -> String -func get_component_type(): - pass +func register(custom_data: Dictionary) -> void: + pass -func register(custom_data: Dictionary): - pass +func get_global_id() -> String: + return self.get_parent().global_id \ No newline at end of file diff --git a/addons/escoria-ui-return-monkey-island/theme/menu.tres b/addons/escoria-ui-return-monkey-island/theme/menu.tres index 64a3da9e..628867dc 100644 --- a/addons/escoria-ui-return-monkey-island/theme/menu.tres +++ b/addons/escoria-ui-return-monkey-island/theme/menu.tres @@ -1,6 +1,4 @@ -[gd_resource type="Theme" load_steps=12 format=3 uid="uid://djtwqnfbbt5t8"] - -[ext_resource type="FontFile" uid="uid://dfs4e42nd215" path="res://addons/escoria-ui-return-monkey-island/fonts/determination.ttf" id="1_p03cv"] +[gd_resource type="Theme" load_steps=11 format=3 uid="uid://djtwqnfbbt5t8"] [sub_resource type="StyleBoxFlat" id="1"] bg_color = Color(0.14902, 0.14902, 0.14902, 0.784314) @@ -36,7 +34,6 @@ bg_color = Color(0.219501, 0.219501, 0.219501, 1) [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_p03cv"] [resource] -Button/fonts/font = ExtResource("1_p03cv") Button/styles/disabled = null Button/styles/focus = SubResource("1") Button/styles/hover = SubResource("2") @@ -47,7 +44,6 @@ CheckButton/styles/hover = SubResource("StyleBoxEmpty_gwd03") CheckButton/styles/hover_pressed = SubResource("StyleBoxEmpty_6jmhn") CheckButton/styles/normal = SubResource("StyleBoxEmpty_ktabe") CheckButton/styles/pressed = SubResource("StyleBoxEmpty_4rhik") -Label/fonts/font = ExtResource("1_p03cv") MarginContainer/constants/margin_bottom = 5 MarginContainer/constants/margin_left = 5 MarginContainer/constants/margin_right = 5 diff --git a/addons/escoria-ui-return-monkey-island/theme/ui.tres b/addons/escoria-ui-return-monkey-island/theme/ui.tres index c1b50cf4..57c01644 100644 --- a/addons/escoria-ui-return-monkey-island/theme/ui.tres +++ b/addons/escoria-ui-return-monkey-island/theme/ui.tres @@ -1,6 +1,4 @@ -[gd_resource type="Theme" load_steps=7 format=3 uid="uid://bf2eet52fueam"] - -[ext_resource type="FontFile" uid="uid://dfs4e42nd215" path="res://addons/escoria-ui-return-monkey-island/fonts/determination.ttf" id="1_6h504"] +[gd_resource type="Theme" load_steps=6 format=3 uid="uid://bf2eet52fueam"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6h504"] @@ -35,20 +33,16 @@ expand_margin_right = 5.0 expand_margin_bottom = 5.0 [resource] -Button/fonts/font = ExtResource("1_6h504") Button/styles/hover = SubResource("StyleBoxFlat_6h504") Label/colors/font_color = Color(1, 1, 1, 1) Label/colors/font_color_shadow = Color(0, 0, 0, 0) Label/colors/font_outline_modulate = Color(1, 0, 0, 1) Label/colors/label_box_bg = Color(0, 0, 0, 0.745098) -Label/fonts/font = ExtResource("1_6h504") Label/styles/normal = SubResource("1") MarginContainer/constants/margin_bottom = 5 MarginContainer/constants/margin_left = 5 MarginContainer/constants/margin_right = 5 MarginContainer/constants/margin_top = 5 PanelContainer/styles/panel = SubResource("StyleBoxEmpty_6h504") -RichTextLabel/fonts/mono_font = ExtResource("1_6h504") -RichTextLabel/fonts/normal_font = ExtResource("1_6h504") RichTextLabel/styles/focus = SubResource("2") RichTextLabel/styles/normal = SubResource("3") From 13fed6a6ca2cc0c1660fcdd0fa729d9c453966a0 Mon Sep 17 00:00:00 2001 From: Oier Bravo Urtasun Date: Fri, 26 Sep 2025 01:01:29 +0200 Subject: [PATCH 2/4] Plugable dev tools, simple registry --- .../GymkhanaAutoload.gd | 2 + .../escoria-ui-return-monkey-island/game.gd | 14 + .../escoria-ui-return-monkey-island/game.tscn | 16 +- .../logger/rtmi_logger.gd | 257 ++++++++++++++++++ .../escoria-ui-return-monkey-island/plugin.gd | 9 +- .../registry/esc_simple_registry.gd | 31 +++ .../registry/esc_simple_registry.gd.uid | 1 + .../rtmi_global_observer.gd | 2 +- .../tools/dev/dev_tools.gd | 33 ++- .../tools/dev/dev_tools.tscn | 71 +---- .../tools/dev/global_inspector.gd | 45 +-- .../tools/dev/global_inspector.tscn | 12 +- .../tools/dev/globals_watcher.gd | 11 +- .../tools/dev/globals_watcher.tscn | 31 +-- .../tools/dev/room_objects.gd | 32 +++ .../tools/dev/room_objects.gd.uid | 1 + .../tools/dev/room_objects.tscn | 25 ++ .../tools/dev/ui/tool_toggle_button.gd | 13 - .../tools/dev/ui/tool_toggle_button.gd.uid | 1 - ...bal_variable.gd => ui_escoria_variable.gd} | 13 +- ...able.gd.uid => ui_escoria_variable.gd.uid} | 0 ...variable.tscn => ui_escoria_variable.tscn} | 8 +- .../dev/ui/ui_escoria_variable_builder.gd | 39 +++ .../dev/ui/ui_escoria_variable_builder.gd.uid | 1 + project.godot | 4 +- 25 files changed, 498 insertions(+), 174 deletions(-) create mode 100644 addons/escoria-ui-return-monkey-island/logger/rtmi_logger.gd create mode 100644 addons/escoria-ui-return-monkey-island/registry/esc_simple_registry.gd create mode 100644 addons/escoria-ui-return-monkey-island/registry/esc_simple_registry.gd.uid create mode 100644 addons/escoria-ui-return-monkey-island/tools/dev/room_objects.gd create mode 100644 addons/escoria-ui-return-monkey-island/tools/dev/room_objects.gd.uid create mode 100644 addons/escoria-ui-return-monkey-island/tools/dev/room_objects.tscn delete mode 100644 addons/escoria-ui-return-monkey-island/tools/dev/ui/tool_toggle_button.gd delete mode 100644 addons/escoria-ui-return-monkey-island/tools/dev/ui/tool_toggle_button.gd.uid rename addons/escoria-ui-return-monkey-island/tools/dev/ui/{ui_global_variable.gd => ui_escoria_variable.gd} (80%) rename addons/escoria-ui-return-monkey-island/tools/dev/ui/{ui_global_variable.gd.uid => ui_escoria_variable.gd.uid} (100%) rename addons/escoria-ui-return-monkey-island/tools/dev/ui/{ui_global_variable.tscn => ui_escoria_variable.tscn} (71%) create mode 100644 addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable_builder.gd create mode 100644 addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable_builder.gd.uid diff --git a/addons/escoria-ui-return-monkey-island/GymkhanaAutoload.gd b/addons/escoria-ui-return-monkey-island/GymkhanaAutoload.gd index aea34b73..bae27cc8 100644 --- a/addons/escoria-ui-return-monkey-island/GymkhanaAutoload.gd +++ b/addons/escoria-ui-return-monkey-island/GymkhanaAutoload.gd @@ -10,6 +10,8 @@ var cursor_manager: RTMICursorManager = RTMICursorManager.new() var csv_parser: RTMICsvParser = RTMICsvParser.new() +var dev_tools_registry: ESCSimpleRegistry = ESCSimpleRegistry.new() + func get_item(global_id: String) -> ESCItem: var object = escoria.object_manager.get_object(global_id) if !object: diff --git a/addons/escoria-ui-return-monkey-island/game.gd b/addons/escoria-ui-return-monkey-island/game.gd index 36e38eca..f2f26659 100644 --- a/addons/escoria-ui-return-monkey-island/game.gd +++ b/addons/escoria-ui-return-monkey-island/game.gd @@ -91,6 +91,13 @@ func _init(): gymkhana.global_observer = RTMIGlobalObserver.new() escoria.di = RTMIDependencyInjector.new() + gymkhana.dev_tools_registry.register(preload("res://addons/escoria-ui-return-monkey-island/tools/dev/room_objects.tscn").instantiate()) + gymkhana.dev_tools_registry.register(preload("res://addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.tscn").instantiate()) + gymkhana.dev_tools_registry.register(preload("res://addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn").instantiate()) + gymkhana.dev_tools_registry.register(preload("res://addons/escoria-core/ui_library/tools/hover_stack/hover_stack.tscn").instantiate()) + gymkhana.dev_tools_registry.register(preload("res://addons/escoria-core/game/scenes/esc_prompt/esc_prompt_popup.tscn").instantiate()) + + func _ready(): tooltip_node = rtmi_tooltip_node # We need a slightly modified version of Action Manager to combine items with different actions. @@ -363,6 +370,13 @@ func open_inventory(): func close_inventory(): pass +func hide_tooltips(): + $game_layer/tooltip_layer.hide() + +func show_tooltips(): + $game_layer/tooltip_layer.show() + + func hide_ui(): $game_layer/ui_layer.hide() $game_layer/dialog_layer.hide() diff --git a/addons/escoria-ui-return-monkey-island/game.tscn b/addons/escoria-ui-return-monkey-island/game.tscn index 6b378e63..e8f46f95 100644 --- a/addons/escoria-ui-return-monkey-island/game.tscn +++ b/addons/escoria-ui-return-monkey-island/game.tscn @@ -5,20 +5,20 @@ [ext_resource type="PackedScene" uid="uid://dmw5gicuenj53" path="res://addons/escoria-core/game/scenes/camera_player/camera.tscn" id="3"] [ext_resource type="PackedScene" uid="uid://d2kogebvoxy51" path="res://addons/escoria-ui-return-monkey-island/rtmi_rich_tooltip.tscn" id="4"] [ext_resource type="Script" uid="uid://lkc4isk3g0rj" path="res://addons/escoria-ui-return-monkey-island/game.gd" id="5"] -[ext_resource type="Texture2D" uid="uid://c0rchilnmxyd" path="res://addons/escoria-ui-return-monkey-island/icons/music-double-note.svg" id="6"] -[ext_resource type="Texture2D" uid="uid://bp62pak4ca30x" path="res://addons/escoria-ui-return-monkey-island/icons/translation.svg" id="6_yfacq"] +[ext_resource type="Texture2D" uid="uid://ce2rx8nm1s6gh" path="res://addons/escoria-ui-return-monkey-island/icons/music-double-note.svg" id="6"] +[ext_resource type="Texture2D" uid="uid://d0ta8viehhtdj" path="res://addons/escoria-ui-return-monkey-island/icons/translation.svg" id="6_yfacq"] [ext_resource type="PackedScene" uid="uid://d3wdxi18u52c5" path="res://addons/escoria-ui-return-monkey-island/menus/main_menu/main_menu.tscn" id="7"] [ext_resource type="PackedScene" uid="uid://yc6r8t73rwrc" path="res://addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.tscn" id="7_qk4ex"] -[ext_resource type="Texture2D" uid="uid://blg7x18xi73va" path="res://addons/escoria-ui-return-monkey-island/icons/translation_hover.svg" id="7_we0hb"] +[ext_resource type="Texture2D" uid="uid://dmtpxqpjt2hvh" path="res://addons/escoria-ui-return-monkey-island/icons/translation_hover.svg" id="7_we0hb"] [ext_resource type="PackedScene" uid="uid://dl7w8oqk1rmhw" path="res://addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.tscn" id="8"] [ext_resource type="Theme" uid="uid://bf2eet52fueam" path="res://addons/escoria-ui-return-monkey-island/theme/ui.tres" id="9"] [ext_resource type="PackedScene" uid="uid://ctg3fukoficqk" path="res://addons/escoria-ui-return-monkey-island/video_player/video_player.tscn" id="12"] -[ext_resource type="Texture2D" uid="uid://dwkquq28fkf8n" path="res://addons/escoria-ui-return-monkey-island/icons/music-double-note-hover.svg" id="13"] -[ext_resource type="Texture2D" uid="uid://bmdk320m4epl1" path="res://addons/escoria-ui-return-monkey-island/icons/menu.svg" id="13_we0hb"] +[ext_resource type="Texture2D" uid="uid://dghklsdy5nmcg" path="res://addons/escoria-ui-return-monkey-island/icons/music-double-note-hover.svg" id="13"] +[ext_resource type="Texture2D" uid="uid://b35fk7ltvp1hc" path="res://addons/escoria-ui-return-monkey-island/icons/menu.svg" id="13_we0hb"] [ext_resource type="Script" uid="uid://chas0xyx88njl" path="res://addons/escoria-ui-return-monkey-island/MusicButton.gd" id="14"] -[ext_resource type="Texture2D" uid="uid://dirueeaui7wlc" path="res://addons/escoria-ui-return-monkey-island/icons/menu_hover.svg" id="14_parhr"] -[ext_resource type="Texture2D" uid="uid://p214fv1y4fr4" path="res://addons/escoria-ui-return-monkey-island/icons/music-double-note-hover-disabled.svg" id="15"] -[ext_resource type="Texture2D" uid="uid://bcurldbc1pvn2" path="res://addons/escoria-ui-return-monkey-island/icons/music-double-note-disabled.svg" id="16"] +[ext_resource type="Texture2D" uid="uid://c6hw4fs6aoydo" path="res://addons/escoria-ui-return-monkey-island/icons/menu_hover.svg" id="14_parhr"] +[ext_resource type="Texture2D" uid="uid://d2sehci16hioi" path="res://addons/escoria-ui-return-monkey-island/icons/music-double-note-hover-disabled.svg" id="15"] +[ext_resource type="Texture2D" uid="uid://e2xk0aimdte" path="res://addons/escoria-ui-return-monkey-island/icons/music-double-note-disabled.svg" id="16"] [ext_resource type="PackedScene" uid="uid://c0066wpl3qky4" path="res://addons/escoria-ui-return-monkey-island/menus/language_selector/language_selector.tscn" id="19_we0hb"] [ext_resource type="Shader" uid="uid://iehp1eakxyak" path="res://addons/escoria-ui-return-monkey-island/shaders/vignette.gdshader" id="20_parhr"] diff --git a/addons/escoria-ui-return-monkey-island/logger/rtmi_logger.gd b/addons/escoria-ui-return-monkey-island/logger/rtmi_logger.gd new file mode 100644 index 00000000..856e2412 --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/logger/rtmi_logger.gd @@ -0,0 +1,257 @@ +class RTMILogger: + # Perform emergency savegame + signal perform_emergency_savegame + + # Sends the error or warning message in the signal + signal error_message_signal(message) + + # Log file format + const LOG_FILE_FORMAT: String = "log_%s_%s.log" + + # Configured log level + var _log_level: int + + # If true, assert() functions will not be called, thus the program won't exit or error. + # Resets to false after an assert() call was ignored once. + var dont_assert: bool = false + + + # Constructor + func _init(): + _log_level = ESCLogLevel.determine_escoria_log_level() + + + func formatted_message(context: String, msg: String, letter: String) -> String: + return "ESC ({0}) {1} {2}: {3}".format([_formatted_date(), letter, context, msg]) + + # Trace log + func trace(owner: Object, msg: String, group: String = ""): + var context: String = owner.get_script().resource_path.get_file() + trace_message(context, msg) + + # Direct message trace log (requiring a string for the context) + func trace_message(context: String, msg: String, group: String = ""): + print(formatted_message(context, msg, "T")) + + + # Debug log + func debug(owner: Object, msg: String, group: String = ""): + var context: String = owner.get_script().resource_path.get_file() + Log.debug(context, msg) + + # Static debug log (requiring a string for the context) + func debug_message(context: String, msg: String, group: String = ""): + Log.debug(formatted_message(context, msg, "D")) + + + func info(owner: Object, msg: String, group: String = ""): + var context: String = owner.get_script().resource_path.get_file() + Log.info(context, msg) + + # Static info log (requiring a string for the context) + func info_message(context: String, msg: String, group: String = ""): + Log.info(formatted_message(context, msg, "I")) + + + # Warning log + func warn(owner: Object, msg: String, group: String = ""): + var context: String = owner.get_script().resource_path.get_file() + Log.warn(context, msg) + + # Static warning log (requiring a string for the context) + func warn_message(context: String, msg: String, group: String = ""): + Log.warn(formatted_message(context, msg, "W")) + push_warning(formatted_message(context, msg, "W")) + if ESCProjectSettingsManager.get_setting( + ESCProjectSettingsManager.TERMINATE_ON_WARNINGS + ): + if not dont_assert: + assert(false) + escoria.get_tree().quit() + dont_assert = false + error_message_signal.emit(msg) + + + # Error log + func error(owner: Object, msg: String, group: String = ""): + var context = owner.get_script().resource_path.get_file() + error_message(context, msg) + + # Static error log (requiring a string for the context) + func error_message(context: String, msg: String, group: String = ""): + printerr(formatted_message(context, msg, "E")) + push_error(formatted_message(context, msg, "E")) + if ESCProjectSettingsManager.get_setting( + ESCProjectSettingsManager.TERMINATE_ON_ERRORS + ): + if not dont_assert: + assert(false) + escoria.get_tree().quit() + dont_assert = false + error_message_signal.emit(msg) + + func get_log_level() -> int: + return _log_level + + + func _formatted_date(): + var info = Time.get_datetime_dict_from_system() + info["year"] = "%04d" % info["year"] + info["month"] = "%02d" % info["month"] + info["day"] = "%02d" % info["day"] + info["hour"] = "%02d" % info["hour"] + info["minute"] = "%02d" % info["minute"] + info["second"] = "%02d" % info["second"] + return "{year}-{month}-{day}T{hour}:{minute}:{second}".format(info) + + +# A logger that logs to the terminal and to a log file. +class RTMILoggerFile extends RTMILogger: + # Log file handler + var log_file: FileAccess + + # Constructor + func _init(): + super() + # This is left alone as this constructor is called from escoria.gd's own + # constructor + var log_file_path = ProjectSettings.get_setting( + ESCProjectSettingsManager.LOG_FILE_PATH + ) + var date = Time.get_datetime_dict_from_system() + log_file_path = log_file_path.path_join(LOG_FILE_FORMAT % [ + str(date["year"]) + str(date["month"]) + str(date["day"]), + str(date["hour"]) + str(date["minute"]) + str(date["second"]) + ]) + log_file = FileAccess.open( + log_file_path, + FileAccess.WRITE + ) + + # Trace log + func trace(owner: Object, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_TRACE: + _log_to_file(owner, msg, "T") + super.trace(owner, msg) + + # Static trace log + func trace_message(context: String, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_TRACE: + _log_to_file_message(context, msg, "T") + super.trace_message(context, msg) + + # Debug log + func debug(owner: Object, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_DEBUG: + _log_to_file(owner, msg, "D") + super.debug(owner, msg) + + # Static debug log + func debug_message(context: String, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_DEBUG: + _log_to_file_message(context, msg, "D") + super.debug_message(context, msg) + + # Info log + func info(owner: Object, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_INFO: + _log_to_file(owner, msg, "I") + super.info(owner, msg) + + # Static info log + func info_message(context: String, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_INFO: + _log_to_file_message(context, msg, "I") + super.info_message(context, msg) + + # Warning log + func warn(owner: Object, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_WARNING: + _log_to_file(owner, msg, "W") + if ESCProjectSettingsManager.get_setting( + ESCProjectSettingsManager.TERMINATE_ON_WARNINGS + ): + _log_stack_trace_to_file() + print_stack() + close_logs() + super.warn(owner, msg) + + # Static warning log + func warn_message(context: String, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_WARNING: + _log_to_file_message(context, msg, "W") + if ESCProjectSettingsManager.get_setting( + ESCProjectSettingsManager.TERMINATE_ON_WARNINGS + ): + _log_stack_trace_to_file() + print_stack() + close_logs() + super.warn_message(context, msg) + + # Error log + func error(owner: Object, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_ERROR: + _log_to_file(owner, msg, "E") + if ESCProjectSettingsManager.get_setting( + ESCProjectSettingsManager.TERMINATE_ON_ERRORS + ): + _log_stack_trace_to_file() + print_stack() + close_logs() + super.error(owner, msg) + + # Static eror log + func error_message(context: String, msg: String, group: String = ""): + if _log_level >= ESCLogLevel.LOG_ERROR: + _log_to_file_message(context, msg, "E") + if ESCProjectSettingsManager.get_setting( + ESCProjectSettingsManager.TERMINATE_ON_ERRORS + ): + _log_stack_trace_to_file() + print_stack() + close_logs() + super.error_message(context, msg) + + # Close the log file cleanly + func close_logs(): + print("Closing logs peacefully.") + _log_line_to_file("Closing logs peacefully.") + log_file.close() + + + func _log_to_file(owner: Object, msg: String, letter: String): + var context: String + if owner != null: + context = owner.get_script().resource_path.get_file() + _log_to_file_message(context, msg, letter) + + func _log_to_file_message(context: String, msg: String, letter: String): + if log_file.is_open(): + log_file.store_string(formatted_message(context, msg, letter) + "\n") + + func _log_line_to_file(msg: String): + if log_file.is_open(): + log_file.store_string(msg + "\n") + + func _log_stack_trace_to_file(): + var frame_number = 0 + for stack in get_stack().slice(2, get_stack().size()): + _log_line_to_file( + "Frame %s - %s:%s in function '%s'" % [ + str(frame_number), + stack["source"], + stack["line"], + stack["function"], + ] + ) + frame_number += 1 + + +# A simple logger that logs to terminal using debug() function +class RTMILoggerVerbose extends RTMILogger: + func _init(): + pass + + func debug(owner: Object, msg: String, group: String = ""): + var context = owner.get_script().resource_path.get_file() + print(context, ": ", msg) diff --git a/addons/escoria-ui-return-monkey-island/plugin.gd b/addons/escoria-ui-return-monkey-island/plugin.gd index 42ccb11b..e3dc1af7 100644 --- a/addons/escoria-ui-return-monkey-island/plugin.gd +++ b/addons/escoria-ui-return-monkey-island/plugin.gd @@ -7,7 +7,6 @@ extends EditorPlugin func _get_plugin_name(): return "escoria-ui-return-monkey-island" - # Deregister UI func _disable_plugin(): print("Disabling plugin Escoria UI Return to Monkey Island.") @@ -16,11 +15,13 @@ func _disable_plugin(): RTMIUiSettings.SOUND_LIBRARY_FOLDER ) - - # Register UI with Escoria -func enable_plugin(): +func _enable_plugin(): print("Enabling plugin Escoria Dialog Simple") + add_autoload_singleton( + "gymkhana", + "res://addons/escoria-ui-return-monkey-island/GymkhanaAutoload.gd" + ) if EscoriaPlugin.register_ui(self, "res://addons/escoria-ui-return-monkey-island/game.tscn"): ESCProjectSettingsManager.register_setting( diff --git a/addons/escoria-ui-return-monkey-island/registry/esc_simple_registry.gd b/addons/escoria-ui-return-monkey-island/registry/esc_simple_registry.gd new file mode 100644 index 00000000..d80e2eae --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/registry/esc_simple_registry.gd @@ -0,0 +1,31 @@ +class_name ESCSimpleRegistry + +var _registry: Dictionary = {} + +const REGISTRY_ID_METHOD: String = "get_registry_id" + +func register(record) -> void: + if !record.has_method(REGISTRY_ID_METHOD): + escoria.logger.error(self, "%s() function not found." % [REGISTRY_ID_METHOD]) + + var record_id: String = record.get_registry_id() + if _registry.has(record_id): + escoria.logger.error(self, "Can't register id twice: %s" % [record_id]) + + _registry[record_id] = record + +func get_registry() -> Dictionary: + return _registry.duplicate(true); + +func get_record(record_id): + if _registry.has(record_id): + return _registry[record_id].duplicate() + return null + +func get_all_records() -> Array: + var all_records: Array = [] + + for record_id in _registry: + all_records.append(_registry[record_id].duplicate()) + + return all_records diff --git a/addons/escoria-ui-return-monkey-island/registry/esc_simple_registry.gd.uid b/addons/escoria-ui-return-monkey-island/registry/esc_simple_registry.gd.uid new file mode 100644 index 00000000..81530e70 --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/registry/esc_simple_registry.gd.uid @@ -0,0 +1 @@ +uid://c1xcrkf2vbipl diff --git a/addons/escoria-ui-return-monkey-island/rtmi_global_observer.gd b/addons/escoria-ui-return-monkey-island/rtmi_global_observer.gd index 1ab302e1..a021717a 100644 --- a/addons/escoria-ui-return-monkey-island/rtmi_global_observer.gd +++ b/addons/escoria-ui-return-monkey-island/rtmi_global_observer.gd @@ -18,4 +18,4 @@ func _on_escoria_global_changed(global: String, old_value, new_value) -> void: if !new_value: return - escoria.globals_manager.set_global("%s%s" % [item.get(0),PICKED_SUFFIX], true) \ No newline at end of file + escoria.globals_manager.set_global("%s%s" % [item.get(0),PICKED_SUFFIX], true) diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.gd b/addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.gd index c79b8a9e..0204d4f9 100644 --- a/addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.gd +++ b/addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.gd @@ -1,21 +1,32 @@ extends PanelContainer -var tools: Dictionary +var devtools: Dictionary @export var toolButtonContainer: Container @export var hover_stack_displayer: Node func _ready() -> void: - if toolButtonContainer.get_child_count() == 0: + devtools = gymkhana.dev_tools_registry.get_registry() + + if devtools.size() == 0: return - for child: Control in toolButtonContainer.get_children(): - if child is DevToolToggleButton: - tools[child.tool_id] = child.tool_node - child.connect("toggle", func(tool_id): toggle_tool(tool_id)) - escoria.inputs_manager.hover_stack.connect("hover_stack_changed", Callable(hover_stack_displayer, "update")) + + for devtool_id in devtools: + devtools[devtool_id].visible = false + %ToolContainer.add_child(devtools[devtool_id]) + + var devToolButton = create_button(devtool_id) + + %Toolbar.add_child(devToolButton) + + #escoria.inputs_manager.hover_stack.connect("hover_stack_changed", Callable(hover_stack_displayer, "update")) func toggle_tool(toolId: String): - tools[toolId].visible = !tools[toolId].visible - #for tool in tools: - # if tool != toolId: - # tools[tool].visible = false + devtools[toolId].visible = !devtools[toolId].visible + +func create_button(devtool_id: String) -> Button: + var dev_tool_button = Button.new() + dev_tool_button.toggle_mode = true + dev_tool_button.text = devtool_id + dev_tool_button.connect("toggled", func(toggled): toggle_tool(devtool_id)) + return dev_tool_button diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.tscn b/addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.tscn index fed1e069..a4d853fb 100644 --- a/addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.tscn +++ b/addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.tscn @@ -1,15 +1,10 @@ -[gd_scene load_steps=8 format=3 uid="uid://yc6r8t73rwrc"] +[gd_scene load_steps=3 format=3 uid="uid://yc6r8t73rwrc"] [ext_resource type="Script" uid="uid://co3lr1fo4jcio" path="res://addons/escoria-ui-return-monkey-island/tools/dev/dev_tools.gd" id="1_081at"] -[ext_resource type="PackedScene" uid="uid://ciyttd4u8lpfa" path="res://addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn" id="1_wjhmu"] -[ext_resource type="Script" uid="uid://dmtnqjdnfeu2u" path="res://addons/escoria-ui-return-monkey-island/tools/dev/ui/tool_toggle_button.gd" id="2_op8os"] -[ext_resource type="PackedScene" uid="uid://dq6oyy5g2m03m" path="res://addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.tscn" id="3_rmud2"] -[ext_resource type="PackedScene" uid="uid://b0q36us3uuimq" path="res://addons/escoria-core/game/scenes/esc_prompt/esc_prompt_popup.tscn" id="4_gnply"] -[ext_resource type="PackedScene" uid="uid://ceu6y33rrbdr" path="res://addons/escoria-core/ui_library/tools/hover_stack/hover_stack.tscn" id="6_v60c2"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_v60c2"] -[node name="DevTools" type="PanelContainer" node_paths=PackedStringArray("toolButtonContainer", "hover_stack_displayer")] +[node name="DevTools" type="PanelContainer" node_paths=PackedStringArray("toolButtonContainer")] custom_minimum_size = Vector2(1280, 0) offset_right = 40.0 offset_bottom = 40.0 @@ -18,69 +13,23 @@ size_flags_vertical = 3 theme_override_styles/panel = SubResource("StyleBoxEmpty_v60c2") script = ExtResource("1_081at") toolButtonContainer = NodePath("MarginContainer/VBoxContainer/Toolbar") -hover_stack_displayer = NodePath("MarginContainer/VBoxContainer/VBoxContainer/hover_stack_layer") [node name="MarginContainer" type="MarginContainer" parent="."] layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] layout_mode = 2 [node name="Toolbar" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 20) layout_mode = 2 -[node name="Globals list" type="Button" parent="MarginContainer/VBoxContainer/Toolbar" node_paths=PackedStringArray("tool_node")] -layout_mode = 2 -text = "Globals list" -script = ExtResource("2_op8os") -tool_id = "globals_list" -tool_node = NodePath("../../VBoxContainer/GlobalList") -metadata/_custom_type_script = "uid://dmtnqjdnfeu2u" - -[node name="Global watcher" type="Button" parent="MarginContainer/VBoxContainer/Toolbar" node_paths=PackedStringArray("tool_node")] -layout_mode = 2 -toggle_mode = true -text = "Watcher" -script = ExtResource("2_op8os") -tool_id = "watcher" -tool_node = NodePath("../../VBoxContainer/GlobalWatcher") -metadata/_custom_type_script = "uid://dmtnqjdnfeu2u" - -[node name="Prompt" type="Button" parent="MarginContainer/VBoxContainer/Toolbar" node_paths=PackedStringArray("tool_node")] -layout_mode = 2 -text = "Prompt" -script = ExtResource("2_op8os") -tool_id = "prompt" -tool_node = NodePath("../../VBoxContainer/esc_prompt_popup") -metadata/_custom_type_script = "uid://dmtnqjdnfeu2u" - -[node name="Hover" type="Button" parent="MarginContainer/VBoxContainer/Toolbar" node_paths=PackedStringArray("tool_node")] -layout_mode = 2 -text = "Hover" -script = ExtResource("2_op8os") -tool_id = "hover_stack" -tool_node = NodePath("../../VBoxContainer/hover_stack_layer") -metadata/_custom_type_script = "uid://dmtnqjdnfeu2u" - [node name="ToolContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true layout_mode = 2 - -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="GlobalList" parent="MarginContainer/VBoxContainer/VBoxContainer" instance=ExtResource("3_rmud2")] -visible = false -layout_mode = 2 -size_flags_horizontal = 0 - -[node name="GlobalWatcher" parent="MarginContainer/VBoxContainer/VBoxContainer" instance=ExtResource("1_wjhmu")] -visible = false -layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 - -[node name="esc_prompt_popup" parent="MarginContainer/VBoxContainer/VBoxContainer" instance=ExtResource("4_gnply")] -initial_position = 2 - -[node name="hover_stack_layer" parent="MarginContainer/VBoxContainer/VBoxContainer" instance=ExtResource("6_v60c2")] -visible = false +size_flags_vertical = 3 diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.gd b/addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.gd index 2f08aefb..63e0d4e5 100644 --- a/addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.gd +++ b/addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.gd @@ -1,47 +1,26 @@ extends Control -@export var labelContainer: VBoxContainer - -var ui_global_variable = preload("res://addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.tscn") +func get_registry_id(): + return "global_inspector" func _ready() -> void: escoria.globals_manager.global_changed.connect(_on_escoria_global_changed) - -# React to changes to inventory globals func _on_escoria_global_changed(global: String, old_value, new_value) -> void: clear() var global_variables = escoria.globals_manager._globals global_variables.sort() for variable_name in global_variables: - var label = createLabel(variable_name,escoria.globals_manager._globals[variable_name] ) - labelContainer.add_child(label) - #_sort() - -# Sort the hover stack by items' z-index -#func _sort(): -# labelContainer.custo -# if labelContainer != null: -# labelContainer.queue_sort().sort_custom(Callable(VariableSorter, "sort_ascending_alphabetical")) + #labelContainer\ + # .add_child(UiEscoriaVariableBuilder\ + # .create(variable_name, escoria.globals_manager._globals[variable_name])) + %Container.add_child( + UiEscoriaVariableBuilder.create( + variable_name, "%s" % escoria.globals_manager._globals[variable_name] + ) + ) func clear(): - for child in labelContainer.get_children(): - labelContainer.remove_child(child) + for child in %Container.get_children(): + %Container.remove_child(child) child.queue_free() - -func setCopied(name): - for child in labelContainer.get_children(): - if child.var_name == name: - child.copied = true - else: - child.copied = false - - -func createLabel(name: String, value): - var uiLabel:UIGlobalVariable = ui_global_variable.instantiate() - uiLabel.set_value(name, value) - uiLabel.connect("just_copied",_on_just_copied) - return uiLabel - -func _on_just_copied(name): - setCopied(name) diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.tscn b/addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.tscn index b0d84447..be0cb19b 100644 --- a/addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.tscn +++ b/addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.tscn @@ -2,19 +2,19 @@ [ext_resource type="Script" uid="uid://bxon8pf4raeid" path="res://addons/escoria-ui-return-monkey-island/tools/dev/global_inspector.gd" id="1_uoyvf"] -[node name="GlobalInspector" type="Control" node_paths=PackedStringArray("labelContainer")] +[node name="GlobalInspector" type="Control"] layout_mode = 3 anchors_preset = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 script = ExtResource("1_uoyvf") -labelContainer = NodePath("PanelContainer/MarginContainer/ScrollContainer/VBoxContainer") [node name="PanelContainer" type="PanelContainer" parent="."] layout_mode = 0 offset_right = 4.0 -offset_bottom = 4.0 +offset_bottom = 404.0 [node name="MarginContainer" type="MarginContainer" parent="PanelContainer"] -custom_minimum_size = Vector2(500, 500) layout_mode = 2 theme_override_constants/margin_left = 2 theme_override_constants/margin_top = 2 @@ -22,8 +22,10 @@ theme_override_constants/margin_right = 2 theme_override_constants/margin_bottom = 2 [node name="ScrollContainer" type="ScrollContainer" parent="PanelContainer/MarginContainer"] +custom_minimum_size = Vector2(0, 400) layout_mode = 2 horizontal_scroll_mode = 0 -[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer/ScrollContainer"] +[node name="Container" type="VBoxContainer" parent="PanelContainer/MarginContainer/ScrollContainer"] +unique_name_in_owner = true layout_mode = 2 diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.gd b/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.gd index afcf9414..941f1cb8 100644 --- a/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.gd +++ b/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.gd @@ -1,6 +1,7 @@ extends Control -@export var labelContainer: Container +func get_registry_id(): + return "globals_watcher" func _ready() -> void: escoria.globals_manager.global_changed.connect(_on_escoria_global_changed) @@ -13,12 +14,12 @@ func _on_escoria_global_changed(global: String, old_value, new_value) -> void: label.set_text(text) - labelContainer.add_child(label) - var count = labelContainer.get_child_count() + %Container.add_child(label) + var count = %Container.get_child_count() func clear(): - for child in labelContainer.get_children(): - labelContainer.remove_child(child) + for child in %Container.get_children(): + %Container.remove_child(child) child.queue_free() func _on_clear_button_pressed() -> void: diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn b/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn index f7b3e31f..8077228d 100644 --- a/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn +++ b/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn @@ -2,22 +2,12 @@ [ext_resource type="Script" uid="uid://bpcta3oc84rhu" path="res://addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.gd" id="1_42y5j"] -[node name="GlobalsWatcher" type="Control" node_paths=PackedStringArray("labelContainer")] +[node name="GlobalsWatcher" type="Control"] layout_mode = 3 anchors_preset = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 script = ExtResource("1_42y5j") -labelContainer = NodePath("PanelContainer/MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VariableContainer") - -[node name="ClearButton" type="Button" parent="."] -layout_mode = 1 -anchors_preset = 2 -anchor_top = 1.0 -anchor_bottom = 1.0 -offset_top = -40.0 -offset_right = 53.0 -grow_vertical = 0 -text = "Clear -" [node name="PanelContainer" type="PanelContainer" parent="."] layout_mode = 0 @@ -25,26 +15,31 @@ offset_right = 40.0 offset_bottom = 40.0 [node name="MarginContainer" type="MarginContainer" parent="PanelContainer"] -custom_minimum_size = Vector2(400, 400) layout_mode = 2 [node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer"] layout_mode = 2 -[node name="ScrollContainer" type="ScrollContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] +[node name="Container" type="ScrollContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true custom_minimum_size = Vector2(0, 400) layout_mode = 2 horizontal_scroll_mode = 0 -[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/ScrollContainer"] +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/Container"] layout_mode = 2 theme_override_constants/margin_left = 5 theme_override_constants/margin_top = 5 theme_override_constants/margin_right = 5 theme_override_constants/margin_bottom = 5 -[node name="VariableContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/ScrollContainer/MarginContainer"] +[node name="VariableContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/Container/MarginContainer"] layout_mode = 2 size_flags_horizontal = 3 -[connection signal="pressed" from="ClearButton" to="." method="_on_clear_button_pressed"] +[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Clear +" + +[connection signal="pressed" from="PanelContainer/MarginContainer/VBoxContainer/ClearButton" to="." method="_on_clear_button_pressed"] diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/room_objects.gd b/addons/escoria-ui-return-monkey-island/tools/dev/room_objects.gd new file mode 100644 index 00000000..90d642a3 --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/tools/dev/room_objects.gd @@ -0,0 +1,32 @@ +extends Control + + +func get_registry_id(): + return "room_objects" + +func _ready() -> void: + escoria.main.room_ready.connect(_on_room_ready) + +func _on_room_ready() -> void: + clear() + #var current_room = escoria.globals_manager.get_global(ESCRoomManager.GLOBAL_CURRENT_SCENE) + var current_room = escoria.object_manager.current_room_key + if current_room.room_global_id != "": + var room_label = Label.new() + room_label.text = current_room.room_global_id + %ObjectContainer.add_child(room_label) + var room_objects = escoria.object_manager._get_room_objects_objects(current_room) + for object_id in room_objects: + var object = room_objects[object_id] + %ObjectContainer.add_child( + UiEscoriaVariableBuilder.prepare().name(object.global_id)\ + .valueFunc( func set_value(): + return "Active" if object.active else "Off" + ) + .build() + ) + +func clear(): + for child in %ObjectContainer.get_children(): + %ObjectContainer.remove_child(child) + child.queue_free() diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/room_objects.gd.uid b/addons/escoria-ui-return-monkey-island/tools/dev/room_objects.gd.uid new file mode 100644 index 00000000..d4bdaca5 --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/tools/dev/room_objects.gd.uid @@ -0,0 +1 @@ +uid://dlkrkp2w2nhv0 diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/room_objects.tscn b/addons/escoria-ui-return-monkey-island/tools/dev/room_objects.tscn new file mode 100644 index 00000000..b5001ccf --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/tools/dev/room_objects.tscn @@ -0,0 +1,25 @@ +[gd_scene load_steps=2 format=3 uid="uid://bl33soqb4k8ga"] + +[ext_resource type="Script" uid="uid://dlkrkp2w2nhv0" path="res://addons/escoria-ui-return-monkey-island/tools/dev/room_objects.gd" id="1_ob0i5"] + +[node name="RoomObjects" type="PanelContainer"] +offset_right = 400.0 +offset_bottom = 420.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("1_ob0i5") + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer"] +custom_minimum_size = Vector2(0, 400) +layout_mode = 2 + +[node name="ObjectContainer" type="VBoxContainer" parent="MarginContainer/ScrollContainer"] +unique_name_in_owner = true +layout_mode = 2 diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/ui/tool_toggle_button.gd b/addons/escoria-ui-return-monkey-island/tools/dev/ui/tool_toggle_button.gd deleted file mode 100644 index a3cdc4f2..00000000 --- a/addons/escoria-ui-return-monkey-island/tools/dev/ui/tool_toggle_button.gd +++ /dev/null @@ -1,13 +0,0 @@ -extends Button -class_name DevToolToggleButton - -@export var tool_id: String -@export var tool_node: Node - -signal toggle - - - -func _ready(): - self.connect("pressed", func(): toggle.emit(tool_id)) - self.toggle_mode = true diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/ui/tool_toggle_button.gd.uid b/addons/escoria-ui-return-monkey-island/tools/dev/ui/tool_toggle_button.gd.uid deleted file mode 100644 index d11cab6e..00000000 --- a/addons/escoria-ui-return-monkey-island/tools/dev/ui/tool_toggle_button.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dmtnqjdnfeu2u diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.gd b/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.gd similarity index 80% rename from addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.gd rename to addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.gd index 6eeba0a1..aec2c603 100644 --- a/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.gd +++ b/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.gd @@ -1,23 +1,21 @@ extends Control -class_name UIGlobalVariable +class_name UIEscoriaVariable var var_name: String var var_value var copied: bool = false -signal just_copied -func set_value(name: String, value): +func set_variable(name: String, value): var_name = name var_value = value $Name.set_text(var_name) $Name.tooltip_text = var_name $Value.text = "%s" % value $Value.tooltip_text = "%s" % value - copied = false - set_value_color() + format_value() -func set_value_color(): +func format_value(): if var_value is bool: var boolean_color = Color.GREEN if var_value else Color.RED $Value.add_theme_color_override("font_color", boolean_color) @@ -28,10 +26,9 @@ func set_value_color(): func _on_name_gui_input(event: InputEvent) -> void: if event is InputEventMouseButton && event.double_click: - just_copied.emit(var_name) + copied = true DisplayServer.clipboard_set(var_name) escoria.logger.info(self, "%s copied." % var_name) - pass # Replace with function body. func _process(delta: float) -> void: if copied: diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.gd.uid b/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.gd.uid similarity index 100% rename from addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.gd.uid rename to addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.gd.uid diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.tscn b/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.tscn similarity index 71% rename from addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.tscn rename to addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.tscn index 38fb2893..89f28482 100644 --- a/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.tscn +++ b/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.tscn @@ -1,9 +1,9 @@ -[gd_scene load_steps=2 format=3 uid="uid://mt5e6xw32u1b"] +[gd_scene load_steps=2 format=3 uid="uid://kp203obry7ij"] -[ext_resource type="Script" uid="uid://bqvsgtqhafuci" path="res://addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_global_variable.gd" id="1_fdv5b"] +[ext_resource type="Script" path="res://addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.gd" id="1_fdv5b"] [node name="Variable" type="HBoxContainer"] -offset_right = 419.0 +offset_right = 454.0 offset_bottom = 23.0 script = ExtResource("1_fdv5b") @@ -25,6 +25,6 @@ size_flags_horizontal = 8 mouse_filter = 1 text = "VERY_LONG_TEXT_VARIABLE_NAME" clip_text = true -text_overrun_behavior = 1 +text_overrun_behavior = 3 [connection signal="gui_input" from="Name" to="." method="_on_name_gui_input"] diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable_builder.gd b/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable_builder.gd new file mode 100644 index 00000000..bd9d3e37 --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable_builder.gd @@ -0,0 +1,39 @@ +class_name UiEscoriaVariableBuilder + +const _scene = preload("res://addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable.tscn") + +var _var_name: String +var _var_value: String + +func _init(key: String = "", value: String = ""): + _var_name = key + _var_value = value + +func name(name: String) -> UiEscoriaVariableBuilder: + _var_name = name + return self + + +func value(value) -> UiEscoriaVariableBuilder: + _var_value = value + return self + +func nameFunc(callable: Callable) -> UiEscoriaVariableBuilder: + _var_name = callable.call() + return self + +func valueFunc(callable: Callable) -> UiEscoriaVariableBuilder: + _var_value = callable.call() + return self + +func build() -> UIEscoriaVariable: + var ui_variable = _scene.instantiate() + ui_variable.set_variable(_var_name, _var_value) + return ui_variable + +static func prepare(): + return UiEscoriaVariableBuilder.new() + +static func create(name: String, value: String): + return UiEscoriaVariableBuilder.new(name, value).build() + diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable_builder.gd.uid b/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable_builder.gd.uid new file mode 100644 index 00000000..987a7589 --- /dev/null +++ b/addons/escoria-ui-return-monkey-island/tools/dev/ui/ui_escoria_variable_builder.gd.uid @@ -0,0 +1 @@ +uid://dnfqmfbcq53mx diff --git a/project.godot b/project.godot index f01284f0..0b475be6 100644 --- a/project.godot +++ b/project.godot @@ -13,7 +13,7 @@ config_version=5 config/name="Las gymkhanikas de Uli" config/description="¡Una emocionante y trepidante aventura!" run/main_scene="res://addons/escoria-core/game/main_scene.tscn" -config/features=PackedStringArray("4.5") +config/features=PackedStringArray("4.4") boot_splash/bg_color=Color(0, 0, 0, 1) boot_splash/fullsize=false boot_splash/use_filter=false @@ -46,7 +46,7 @@ search_in_file_extensions=PackedStringArray("gd", "shader", "esc") [editor_plugins] -enabled=PackedStringArray("res://addons/escoria-core/plugin.cfg", "res://addons/escoria-ui-return-monkey-island/plugin.cfg", "res://addons/escoria-ui-return-monkey-island-dialog-simple/plugin.cfg") +enabled=PackedStringArray("res://addons/escoria-core/plugin.cfg", "res://addons/escoria-ui-return-monkey-island-dialog-simple/plugin.cfg", "res://addons/escoria-ui-return-monkey-island/plugin.cfg", "res://addons/godot-plugin-refresher/plugin.cfg", "res://addons/script-ide/plugin.cfg") [escoria] From 3299e6c369001529d141fa1ce789d7e7df79ec5b Mon Sep 17 00:00:00 2001 From: Oier Bravo Urtasun Date: Sun, 28 Sep 2025 01:26:30 +0200 Subject: [PATCH 3/4] Escape to continue --- .../menus/pause_menu/pause_menu.gd | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.gd b/addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.gd index 44b1dbb6..e01a7b49 100644 --- a/addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.gd +++ b/addons/escoria-ui-return-monkey-island/menus/pause_menu/pause_menu.gd @@ -10,8 +10,7 @@ func _ready(): # Continue the game func _on_continue_pressed(): - escoria.main.current_scene.game.unpause_game() - + _unpause() # Show the save slots func _on_save_game_pressed(): @@ -70,6 +69,12 @@ func reset(): func _on_new_game_pressed(): - #yield(escoria.new_game(), "completed") escoria.new_game() + _unpause() + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("ui_cancel") and escoria.current_state == escoria.GAME_STATE.PAUSED: + call_deferred("_unpause") + +func _unpause(): escoria.main.current_scene.game.unpause_game() From be1e9be9d5b7166cd232174c868815d14d218975 Mon Sep 17 00:00:00 2001 From: Oier Bravo Urtasun Date: Sun, 28 Sep 2025 01:27:16 +0200 Subject: [PATCH 4/4] Watcher fix --- .../tools/dev/globals_watcher.tscn | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn b/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn index 8077228d..6d40f052 100644 --- a/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn +++ b/addons/escoria-ui-return-monkey-island/tools/dev/globals_watcher.tscn @@ -20,20 +20,20 @@ layout_mode = 2 [node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer"] layout_mode = 2 -[node name="Container" type="ScrollContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] -unique_name_in_owner = true +[node name="ScrollContainer" type="ScrollContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] custom_minimum_size = Vector2(0, 400) layout_mode = 2 horizontal_scroll_mode = 0 -[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/Container"] +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/ScrollContainer"] layout_mode = 2 theme_override_constants/margin_left = 5 theme_override_constants/margin_top = 5 theme_override_constants/margin_right = 5 theme_override_constants/margin_bottom = 5 -[node name="VariableContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/Container/MarginContainer"] +[node name="Container" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/ScrollContainer/MarginContainer"] +unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3