From a7dbd5d5c3ce6a2e008fd5fdb2661480d4cb7dcc Mon Sep 17 00:00:00 2001 From: Michael Bolin Date: Wed, 23 Feb 2022 09:40:01 -0800 Subject: [PATCH] feat: introduce escoria-ui-keyboard-9verbs to verify register_custom_input_handler() API This commit was started by copying `addons/escoria-ui-9verbs` as the basis for `addons/escoria-ui-keyboard-9verbs`. It was then amended to wire up keyboard shortcuts for each verb using the new `register_custom_input_handler()` API. Note that `addons/escoria-ui-keyboard-9verbs/input_map.gd` introduces one action per verb and provides a `add_actions_to_input_map()` function to add the actions to the `InputMap`. The `_process_input()` function in `game.gd` is responsible for mapping each action to the appropriate call to `verbs_menu.on_action_selected()`. --- .../fonts/caslonantique.tres | 7 + .../fonts/caslonantique.ttf | Bin 0 -> 147756 bytes addons/escoria-ui-keyboard-9verbs/game.gd | 415 ++++++++++++++++++ addons/escoria-ui-keyboard-9verbs/game.tscn | 165 +++++++ .../escoria-ui-keyboard-9verbs/input_map.gd | 60 +++ .../inventory/inventory_ui.tscn | 31 ++ addons/escoria-ui-keyboard-9verbs/plugin.cfg | 7 + addons/escoria-ui-keyboard-9verbs/plugin.gd | 18 + addons/escoria-ui-keyboard-9verbs/theme.tres | 6 + .../tooltip/action_target_tooltip.tscn | 14 + .../tooltip/tooltip_action_target.gd | 31 ++ .../escoria-ui-keyboard-9verbs/verbs_menu.gd | 32 ++ .../verbs_menu.tscn | 125 ++++++ 13 files changed, 911 insertions(+) create mode 100644 addons/escoria-ui-keyboard-9verbs/fonts/caslonantique.tres create mode 100755 addons/escoria-ui-keyboard-9verbs/fonts/caslonantique.ttf create mode 100644 addons/escoria-ui-keyboard-9verbs/game.gd create mode 100644 addons/escoria-ui-keyboard-9verbs/game.tscn create mode 100644 addons/escoria-ui-keyboard-9verbs/input_map.gd create mode 100644 addons/escoria-ui-keyboard-9verbs/inventory/inventory_ui.tscn create mode 100644 addons/escoria-ui-keyboard-9verbs/plugin.cfg create mode 100644 addons/escoria-ui-keyboard-9verbs/plugin.gd create mode 100644 addons/escoria-ui-keyboard-9verbs/theme.tres create mode 100644 addons/escoria-ui-keyboard-9verbs/tooltip/action_target_tooltip.tscn create mode 100644 addons/escoria-ui-keyboard-9verbs/tooltip/tooltip_action_target.gd create mode 100644 addons/escoria-ui-keyboard-9verbs/verbs_menu.gd create mode 100644 addons/escoria-ui-keyboard-9verbs/verbs_menu.tscn diff --git a/addons/escoria-ui-keyboard-9verbs/fonts/caslonantique.tres b/addons/escoria-ui-keyboard-9verbs/fonts/caslonantique.tres new file mode 100644 index 000000000..7f4ea46fb --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/fonts/caslonantique.tres @@ -0,0 +1,7 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://addons/escoria-ui-keyboard-9verbs/fonts/caslonantique.ttf" type="DynamicFontData" id=1] + +[resource] +size = 21 +font_data = ExtResource( 1 ) diff --git a/addons/escoria-ui-keyboard-9verbs/fonts/caslonantique.ttf b/addons/escoria-ui-keyboard-9verbs/fonts/caslonantique.ttf new file mode 100755 index 0000000000000000000000000000000000000000..eec6f639fb4e48abb98604096bb232ff8dfb3614 GIT binary patch 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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 literal 0 HcmV?d00001 diff --git a/addons/escoria-ui-keyboard-9verbs/game.gd b/addons/escoria-ui-keyboard-9verbs/game.gd new file mode 100644 index 000000000..a15825817 --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/game.gd @@ -0,0 +1,415 @@ +extends ESCGame + + +const VERB_CLOSE = "close" +const VERB_GIVE = "give" +const VERB_LOOK = "look" +const VERB_OPEN = "open" +const VERB_PICKUP = "pickup" +const VERB_PULL = "pull" +const VERB_PUSH = "push" +const VERB_TALK = "talk" +const VERB_USE = "use" + + +""" +Implement methods to react to inputs. + +- left_click_on_bg(position: Vector2) +- right_click_on_bg(position: Vector2) +- left_double_click_on_bg(position: Vector2) + +- element_focused(element_id: String) +- element_unfocused() + +- left_click_on_item(item_global_id: String, event: InputEvent) +- right_click_on_item(item_global_id: String, event: InputEvent) +- left_double_click_on_item(item_global_id: String, event: InputEvent) + +- left_click_on_inventory_item(inventory_item_global_id: String, event: InputEvent) +- right_click_on_inventory_item(inventory_item_global_id: String, event: InputEvent) +- left_double_click_on_inventory_item(inventory_item_global_id: String, event: InputEvent) +- inventory_item_focused(inventory_item_global_id: String) +- inventory_item_unfocused() +- open_inventory() +- close_inventory() + +- mousewheel_action(direction: int) + +- hide_ui() +- show_ui() + +- pause_game() +- unpause_game() +- show_main_menu() +- hide_main_menu() + +- apply_custom_settings() + +- _on_event_done(event_name: String) +""" + + +onready var verbs_menu = $ui/Control/panel_down/VBoxContainer/HBoxContainer\ + /VerbsMargin/verbs_menu +onready var tooltip = $ui/Control/panel_down/VBoxContainer/MarginContainer\ + /tooltip +onready var room_select = $ui/Control/panel_down/VBoxContainer/HBoxContainer\ + /MainMargin/VBoxContainer/room_select +onready var inventory_ui = $ui/Control/panel_down/VBoxContainer/HBoxContainer\ + /InventoryMargin/inventory_ui +const input_map = preload("res://addons/escoria-ui-keyboard-9verbs/input_map.gd") + +func _enter_tree(): + var room_selector_parent = $ui/Control/panel_down/VBoxContainer\ + /HBoxContainer/MainMargin/VBoxContainer + + if ProjectSettings.get_setting("escoria/debug/enable_room_selector") and \ + room_selector_parent.get_node_or_null("room_select") == null: + room_selector_parent.add_child( + preload( + "res://addons/escoria-core/ui_library/tools/room_select" +\ + "/room_select.tscn" + ).instance() + ) + + var input_handler = funcref(self, "_process_input") + escoria.inputs_manager.register_custom_input_handler(input_handler) + input_map.add_actions_to_input_map() + + +func _exit_tree(): + escoria.inputs_manager.register_custom_input_handler(null) + input_map.erase_actions_from_input_map() + + +func _process_input(event: InputEvent, is_default_state: bool) -> bool: + if not is_default_state: + return false + elif event.is_action_pressed(input_map.ACTION_SET_VERB_OPEN): + verbs_menu.on_action_selected(VERB_OPEN) + return true + elif event.is_action_pressed(input_map.ACTION_SET_VERB_PICKUP): + verbs_menu.on_action_selected(VERB_PICKUP) + return true + elif event.is_action_pressed(input_map.ACTION_SET_VERB_PUSH): + verbs_menu.on_action_selected(VERB_PUSH) + return true + elif event.is_action_pressed(input_map.ACTION_SET_VERB_CLOSE): + verbs_menu.on_action_selected(VERB_CLOSE) + return true + elif event.is_action_pressed(input_map.ACTION_SET_VERB_LOOK): + verbs_menu.on_action_selected(VERB_LOOK) + return true + elif event.is_action_pressed(input_map.ACTION_SET_VERB_PULL): + verbs_menu.on_action_selected(VERB_PULL) + return true + elif event.is_action_pressed(input_map.ACTION_SET_VERB_GIVE): + verbs_menu.on_action_selected(VERB_GIVE) + return true + elif event.is_action_pressed(input_map.ACTION_SET_VERB_USE): + verbs_menu.on_action_selected(VERB_USE) + return true + elif event.is_action_pressed(input_map.ACTION_SET_VERB_TALK): + verbs_menu.on_action_selected(VERB_TALK) + return true + else: + return false + + +## BACKGROUND ## + +func left_click_on_bg(position: Vector2) -> void: + if escoria.main.current_scene.player: + escoria.action_manager.do( + escoria.action_manager.ACTION.BACKGROUND_CLICK, + [escoria.main.current_scene.player.global_id, position], + true + ) + escoria.action_manager.clear_current_action() + escoria.action_manager.clear_current_tool() + tooltip.clear() + verbs_menu.unselect_actions() + + +func right_click_on_bg(position: Vector2) -> void: + if escoria.main.current_scene.player: + escoria.action_manager.do( + escoria.action_manager.ACTION.BACKGROUND_CLICK, + [escoria.main.current_scene.player.global_id, position], + true + ) + escoria.action_manager.clear_current_action() + escoria.action_manager.clear_current_tool() + tooltip.clear() + verbs_menu.unselect_actions() + + +func left_double_click_on_bg(position: Vector2) -> void: + if escoria.main.current_scene.player: + escoria.action_manager.do( + escoria.action_manager.ACTION.BACKGROUND_CLICK, + [escoria.main.current_scene.player.global_id, position, true], + true + ) + escoria.action_manager.clear_current_action() + verbs_menu.unselect_actions() + + +## ITEM FOCUS ## + +func element_focused(element_id: String) -> void: + var target_obj = escoria.object_manager.get_object(element_id).node + + match escoria.action_manager.action_state: + # Don't change the tooltip if an action input is completed + # (ie verb+item(+target)) because the action is now being executed + # and the tooltip is already set because the item was focused + # (see element_focused() and inventory_item_focused()) + ESCActionManager.ACTION_INPUT_STATE.COMPLETED: + return + + ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM, \ + ESCActionManager.ACTION_INPUT_STATE.AWAITING_ITEM: + tooltip.set_target(target_obj.tooltip_name) + + ESCActionManager.ACTION_INPUT_STATE.AWAITING_TARGET_ITEM: + tooltip.set_target2(target_obj.tooltip_name) + + +func element_unfocused() -> void: + match escoria.action_manager.action_state: + # Don't change the tooltip if an action input is completed + # (ie verb+item(+target)) because the action is now being executed + # and the tooltip is already set because the item was focused + # (see element_focused() and inventory_item_focused()) + ESCActionManager.ACTION_INPUT_STATE.COMPLETED: + return + + ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM, \ + ESCActionManager.ACTION_INPUT_STATE.AWAITING_ITEM: + tooltip.set_target("") + verbs_menu.unselect_actions() + + ESCActionManager.ACTION_INPUT_STATE.AWAITING_TARGET_ITEM: + tooltip.set_target2("") + + + +## ITEMS ## +func left_click_on_item(item_global_id: String, event: InputEvent) -> void: + escoria.action_manager.do( + escoria.action_manager.ACTION.ITEM_LEFT_CLICK, + [item_global_id, event], + true + ) + + var target_obj = escoria.object_manager.get_object( + item_global_id + ).node + + match escoria.action_manager.action_state: + # Don't change the tooltip if an action input is completed + # (ie verb+item(+target)) because the action is now being executed + # and the tooltip is already set because the item was focused + # (see element_focused() and inventory_item_focused()) + ESCActionManager.ACTION_INPUT_STATE.COMPLETED: + return + + # Just clicked on the item + ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM, \ + ESCActionManager.ACTION_INPUT_STATE.AWAITING_ITEM: + tooltip.set_target(target_obj.tooltip_name) + + # Clicked on item and now we're awaiting a target item + # This means we clicked the tool and we now need a target + ESCActionManager.ACTION_INPUT_STATE.AWAITING_TARGET_ITEM: + tooltip.set_target(target_obj.tooltip_name, true) + + + +func right_click_on_item(item_global_id: String, event: InputEvent) -> void: + escoria.action_manager.set_current_action(verbs_menu.selected_action) + escoria.action_manager.do( + escoria.action_manager.ACTION.ITEM_RIGHT_CLICK, + [item_global_id, event], + true + ) + + +func left_double_click_on_item(item_global_id: String, event: InputEvent) -> void: + escoria.action_manager.do( + escoria.action_manager.ACTION.ITEM_LEFT_CLICK, + [item_global_id, event], + true + ) + + +## INVENTORY ## +func left_click_on_inventory_item(inventory_item_global_id: String, event: InputEvent) -> void: + escoria.action_manager.do( + escoria.action_manager.ACTION.ITEM_LEFT_CLICK, + [inventory_item_global_id, event] + ) + + var target_obj = escoria.object_manager.get_object( + inventory_item_global_id + ).node + + match escoria.action_manager.action_state: + # Don't change the tooltip if an action input is completed + # (ie verb+item(+target)) because the action is now being executed + # and the tooltip is already set because the item was focused + # (see element_focused() and inventory_item_focused()) + ESCActionManager.ACTION_INPUT_STATE.COMPLETED: + return + + # Just clicked on the inventory item: do nothing special + ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM, \ + ESCActionManager.ACTION_INPUT_STATE.AWAITING_ITEM: + return + + # Clicked on inventory item and now we're awaiting a target item + # This means we clicked the tool and we now need a target + ESCActionManager.ACTION_INPUT_STATE.AWAITING_TARGET_ITEM: + tooltip.set_target(target_obj.tooltip_name, true) + + +func right_click_on_inventory_item(inventory_item_global_id: String, event: InputEvent) -> void: + escoria.action_manager.set_current_action(verbs_menu.selected_action) + escoria.action_manager.do( + escoria.action_manager.ACTION.ITEM_RIGHT_CLICK, + [inventory_item_global_id, event] + ) + + +func left_double_click_on_inventory_item(_inventory_item_global_id: String, _event: InputEvent) -> void: + pass + + +func inventory_item_focused(inventory_item_global_id: String) -> void: + var target_obj = escoria.object_manager.get_object( + inventory_item_global_id + ).node + + match escoria.action_manager.action_state: + # Don't change the tooltip if an action input is completed + # (ie verb+item(+target)) because the action is now being executed + # and the tooltip is already set because the item was focused + # (see element_focused() and inventory_item_focused()) + ESCActionManager.ACTION_INPUT_STATE.COMPLETED: + return + + ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM, \ + ESCActionManager.ACTION_INPUT_STATE.AWAITING_ITEM: + tooltip.set_target(target_obj.tooltip_name) + + # Hovering an ESCItem highlights its default action + if escoria.action_manager.current_action != VERB_USE and target_obj is ESCItem: + verbs_menu.set_by_name(target_obj.default_action) + + ESCActionManager.ACTION_INPUT_STATE.AWAITING_TARGET_ITEM: + tooltip.set_target2(target_obj.tooltip_name) + + +func inventory_item_unfocused() -> void: + + match escoria.action_manager.action_state: + ESCActionManager.ACTION_INPUT_STATE.COMPLETED: + # Don't change the tooltip if an action input is completed + # (ie verb+item(+target)) because the action is now being executed + return + + ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM, \ + ESCActionManager.ACTION_INPUT_STATE.AWAITING_ITEM: + tooltip.set_target("") + verbs_menu.unselect_actions() + + ESCActionManager.ACTION_INPUT_STATE.AWAITING_TARGET_ITEM: + tooltip.set_target2("") + + +func open_inventory(): + pass + + +func close_inventory(): + pass + + +func mousewheel_action(_direction: int): + pass + + +func hide_ui(): + $ui/Control.hide() + verbs_menu.hide() + if ProjectSettings.get("escoria/debug/enable_room_selector") == true: + room_select.hide() + inventory_ui.hide() + tooltip.hide() + + +func show_ui(): + $ui/Control.show() + verbs_menu.show() + if ProjectSettings.get("escoria/debug/enable_room_selector") == true: + room_select.show() + inventory_ui.show() + tooltip.show() + +func hide_main_menu(): + if get_node(main_menu).visible: + get_node(main_menu).hide() + show_ui() + +func show_main_menu(): + if not get_node(main_menu).visible: + hide_ui() + get_node(main_menu).reset() + get_node(main_menu).show() + +func unpause_game(): + if get_node(pause_menu).visible: + get_node(pause_menu).hide() + escoria.object_manager.get_object("_camera").node.current = true + escoria.main.current_scene.game.show_ui() + escoria.main.current_scene.show() + escoria.set_game_paused(false) + +func pause_game(): + if not get_node(pause_menu).visible: + get_node(pause_menu).reset() + get_node(pause_menu).set_save_enabled(escoria.save_manager.save_enabled) + get_node(pause_menu).show() + escoria.object_manager.get_object("_camera").node.current = false + escoria.main.current_scene.game.hide_ui() + escoria.main.current_scene.hide() + escoria.set_game_paused(true) + + +func _on_MenuButton_pressed() -> void: + pause_game() + + +func _on_action_finished() -> void: + verbs_menu.unselect_actions() + tooltip.clear() + +func _on_event_done(_return_code: int, _event_name: String): + escoria.action_manager.clear_current_action() + verbs_menu.unselect_actions() + + +func apply_custom_settings(custom_settings: Dictionary): + if custom_settings.has("a_custom_setting"): + escoria.logger.info( + "custom setting value loaded:", + [custom_settings["a_custom_setting"]] + ) + + +func get_custom_data() -> Dictionary: + return { + "ui_type": "9verbs" + } diff --git a/addons/escoria-ui-keyboard-9verbs/game.tscn b/addons/escoria-ui-keyboard-9verbs/game.tscn new file mode 100644 index 000000000..bbc16fdc0 --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/game.tscn @@ -0,0 +1,165 @@ +[gd_scene load_steps=11 format=2] + +[ext_resource path="res://addons/escoria-ui-keyboard-9verbs/tooltip/action_target_tooltip.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/escoria-ui-keyboard-9verbs/inventory/inventory_ui.tscn" type="PackedScene" id=2] +[ext_resource path="res://addons/escoria-ui-keyboard-9verbs/verbs_menu.tscn" type="PackedScene" id=3] +[ext_resource path="res://addons/escoria-core/game/scenes/dialogs/esc_dialog_player.gd" type="Script" id=4] +[ext_resource path="res://addons/escoria-ui-keyboard-9verbs/game.gd" type="Script" id=5] +[ext_resource path="res://addons/escoria-core/game/scenes/camera_player/camera.tscn" type="PackedScene" id=6] +[ext_resource path="res://addons/escoria-core/ui_library/menus/main_menu/main_menu.tscn" type="PackedScene" id=7] +[ext_resource path="res://addons/escoria-core/ui_library/menus/pause_menu/pause_menu.tscn" type="PackedScene" id=9] +[ext_resource path="res://addons/escoria-ui-keyboard-9verbs/theme.tres" type="Theme" id=10] + +[sub_resource type="StyleBoxFlat" id=1] +bg_color = Color( 0.6, 0.6, 0.6, 0.5 ) + +[node name="game" type="Node2D"] +script = ExtResource( 5 ) +main_menu = NodePath("ui/main_menu") +pause_menu = NodePath("ui/pause_menu") + +[node name="dialog_layer" type="CanvasLayer" parent="."] + +[node name="ESCDialogsPlayer" type="Control" parent="dialog_layer"] +theme = ExtResource( 10 ) +script = ExtResource( 4 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="ui" type="CanvasLayer" parent="."] + +[node name="Control" type="Control" parent="ui"] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +theme = ExtResource( 10 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="panel_down" type="PanelContainer" parent="ui/Control"] +anchor_top = 0.7 +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_vertical = 3 +custom_styles/panel = SubResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="ui/Control/panel_down"] +margin_right = 1280.0 +margin_bottom = 270.0 + +[node name="MarginContainer" type="MarginContainer" parent="ui/Control/panel_down/VBoxContainer"] +margin_right = 1280.0 +margin_bottom = 32.0 +custom_constants/margin_top = 10 + +[node name="tooltip" parent="ui/Control/panel_down/VBoxContainer/MarginContainer" instance=ExtResource( 1 )] +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 10.0 +margin_right = 1280.0 +margin_bottom = 32.0 +bbcode_text = "[center]Test[/center]" +text = "Test" +fit_content_height = true +color = Color( 1, 1, 1, 1 ) + +[node name="HSeparator" type="HSeparator" parent="ui/Control/panel_down/VBoxContainer"] +margin_top = 36.0 +margin_right = 1280.0 +margin_bottom = 46.0 +custom_constants/separation = 10 + +[node name="HBoxContainer" type="HBoxContainer" parent="ui/Control/panel_down/VBoxContainer"] +margin_top = 50.0 +margin_right = 1280.0 +margin_bottom = 270.0 +size_flags_vertical = 3 + +[node name="VerbsMargin" type="MarginContainer" parent="ui/Control/panel_down/VBoxContainer/HBoxContainer"] +margin_right = 424.0 +margin_bottom = 220.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/margin_right = 20 +custom_constants/margin_top = 20 +custom_constants/margin_left = 20 +custom_constants/margin_bottom = 20 + +[node name="verbs_menu" parent="ui/Control/panel_down/VBoxContainer/HBoxContainer/VerbsMargin" instance=ExtResource( 3 )] +margin_left = 20.0 +margin_top = 20.0 +margin_right = 404.0 +margin_bottom = 200.0 + +[node name="MainMargin" type="MarginContainer" parent="ui/Control/panel_down/VBoxContainer/HBoxContainer"] +margin_left = 428.0 +margin_right = 852.0 +margin_bottom = 220.0 +size_flags_horizontal = 3 +custom_constants/margin_right = 20 +custom_constants/margin_top = 20 +custom_constants/margin_left = 20 +custom_constants/margin_bottom = 20 + +[node name="VBoxContainer" type="VBoxContainer" parent="ui/Control/panel_down/VBoxContainer/HBoxContainer/MainMargin"] +margin_left = 20.0 +margin_top = 20.0 +margin_right = 404.0 +margin_bottom = 200.0 + +[node name="MarginContainer" type="MarginContainer" parent="ui/Control/panel_down/VBoxContainer/HBoxContainer/MainMargin/VBoxContainer"] +margin_left = 142.0 +margin_top = 70.0 +margin_right = 242.0 +margin_bottom = 110.0 +rect_min_size = Vector2( 100, 40 ) +size_flags_horizontal = 6 +size_flags_vertical = 6 + +[node name="MenuButton" type="Button" parent="ui/Control/panel_down/VBoxContainer/HBoxContainer/MainMargin/VBoxContainer/MarginContainer"] +margin_right = 100.0 +margin_bottom = 40.0 +text = "Menu" + +[node name="InventoryMargin" type="MarginContainer" parent="ui/Control/panel_down/VBoxContainer/HBoxContainer"] +margin_left = 856.0 +margin_right = 1280.0 +margin_bottom = 220.0 +size_flags_horizontal = 3 +custom_constants/margin_right = 20 +custom_constants/margin_top = 20 +custom_constants/margin_left = 20 +custom_constants/margin_bottom = 20 + +[node name="inventory_ui" parent="ui/Control/panel_down/VBoxContainer/HBoxContainer/InventoryMargin" instance=ExtResource( 2 )] +margin_left = 20.0 +margin_top = 20.0 +margin_right = 404.0 +margin_bottom = 200.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="hover_stack" type="Label" parent="ui"] +margin_left = 1085.0 +margin_top = 2.81912 +margin_right = 1283.0 +margin_bottom = 107.819 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="main_menu" parent="ui" instance=ExtResource( 7 )] +visible = false + +[node name="pause_menu" parent="ui" instance=ExtResource( 9 )] +visible = false +theme = ExtResource( 10 ) + +[node name="camera" parent="." instance=ExtResource( 6 )] + +[connection signal="pressed" from="ui/Control/panel_down/VBoxContainer/HBoxContainer/MainMargin/VBoxContainer/MarginContainer/MenuButton" to="." method="_on_MenuButton_pressed"] diff --git a/addons/escoria-ui-keyboard-9verbs/input_map.gd b/addons/escoria-ui-keyboard-9verbs/input_map.gd new file mode 100644 index 000000000..cabf00f5f --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/input_map.gd @@ -0,0 +1,60 @@ +const ACTION_SET_VERB_OPEN = "set_action_verb_open" +const ACTION_SET_VERB_PICKUP = "set_action_verb_pickup" +const ACTION_SET_VERB_PUSH = "set_action_verb_push" +const ACTION_SET_VERB_CLOSE = "set_action_verb_close" +const ACTION_SET_VERB_LOOK = "set_action_verb_look" +const ACTION_SET_VERB_PULL = "set_action_verb_pull" +const ACTION_SET_VERB_GIVE = "set_action_verb_give" +const ACTION_SET_VERB_USE = "set_action_verb_use" +const ACTION_SET_VERB_TALK = "set_action_verb_talk" + +""" +The keyboard shortcuts are chosen to match the geometric layout in the +9verb UI (example below assumes QWERTY, but implementation should work +for non-QWERTY, as well): + +``` +open | pickup | push -> Q | W | E +close | look | pull -> A | S | D +give | use | talk -> Z | X | C +``` +""" + + +# Implemented as an array of arrays rather than a dict because dict +# does not have an items() method to enumerate entries together: +# https://github.com/godotengine/godot-proposals/issues/1965 +const action_to_scancode = [ + [ACTION_SET_VERB_OPEN, KEY_Q], + [ACTION_SET_VERB_PICKUP, KEY_W], + [ACTION_SET_VERB_PUSH, KEY_E], + + [ACTION_SET_VERB_CLOSE, KEY_A], + [ACTION_SET_VERB_LOOK, KEY_S], + [ACTION_SET_VERB_PULL, KEY_D], + + [ACTION_SET_VERB_GIVE, KEY_Z], + [ACTION_SET_VERB_USE, KEY_X], + [ACTION_SET_VERB_TALK, KEY_C], +] + + +static func add_actions_to_input_map() -> void: + for entry in action_to_scancode: + var action = entry[0] + var scancode = entry[1] + var event = InputEventKey.new() + # Based on https://github.com/godotengine/godot/pull/18020, + # `physical_scancode` seems like a more appropriate property than + # `scancode` in order to support non-QWERTY keyboard layouts while + # preserving the geometric pattern of the shortcuts. + event.physical_scancode = scancode + InputMap.add_action(action) + InputMap.action_add_event(action, event) + + +static func erase_actions_from_input_map() -> void: + for entry in action_to_scancode: + var action = entry[0] + InputMap.action_erase_events(action) + InputMap.erase_action(action) diff --git a/addons/escoria-ui-keyboard-9verbs/inventory/inventory_ui.tscn b/addons/escoria-ui-keyboard-9verbs/inventory/inventory_ui.tscn new file mode 100644 index 000000000..13aa09dbb --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/inventory/inventory_ui.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/escoria-core/game/scenes/inventory/inventory_ui.gd" type="Script" id=1] +[ext_resource path="res://addons/escoria-core/ui_library/inventory/esc_inventory_container.gd" type="Script" id=3] + +[node name="inventory_ui" type="PanelContainer"] +margin_right = 600.0 +margin_bottom = 175.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +inventory_ui_container = NodePath("ScrollContainer/GridContainer") + +[node name="ScrollContainer" type="ScrollContainer" parent="."] +margin_left = 7.0 +margin_top = 7.0 +margin_right = 593.0 +margin_bottom = 168.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="GridContainer" type="GridContainer" parent="ScrollContainer"] +margin_right = 586.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/vseparation = 16 +custom_constants/hseparation = 16 +columns = 4 +script = ExtResource( 3 ) diff --git a/addons/escoria-ui-keyboard-9verbs/plugin.cfg b/addons/escoria-ui-keyboard-9verbs/plugin.cfg new file mode 100644 index 000000000..32c387476 --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Escoria 9 Verbs UI" +description="Classical LucasArts style 9-verbs UI for the Escoria Framework" +author="StraToN" +version="1.0.0" +script="plugin.gd" diff --git a/addons/escoria-ui-keyboard-9verbs/plugin.gd b/addons/escoria-ui-keyboard-9verbs/plugin.gd new file mode 100644 index 000000000..d1496ff6b --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/plugin.gd @@ -0,0 +1,18 @@ +# Plugin script to initialize Escoria simple mouse UI +tool +extends EditorPlugin + + +# Register UI +func _enter_tree() -> void: + call_deferred("_register") + + +# Deregister UI +func _exit_tree() -> void: + escoria.deregister_ui("res://addons/escoria-ui-keyboard-9verbs/game.tscn") + + +# Register UI with Escoria +func _register(): + escoria.register_ui("res://addons/escoria-ui-keyboard-9verbs/game.tscn") diff --git a/addons/escoria-ui-keyboard-9verbs/theme.tres b/addons/escoria-ui-keyboard-9verbs/theme.tres new file mode 100644 index 000000000..b90432150 --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/theme.tres @@ -0,0 +1,6 @@ +[gd_resource type="Theme" load_steps=2 format=2] + +[ext_resource path="res://addons/escoria-ui-keyboard-9verbs/fonts/caslonantique.tres" type="DynamicFont" id=1] + +[resource] +default_font = ExtResource( 1 ) diff --git a/addons/escoria-ui-keyboard-9verbs/tooltip/action_target_tooltip.tscn b/addons/escoria-ui-keyboard-9verbs/tooltip/action_target_tooltip.tscn new file mode 100644 index 000000000..ddead2f69 --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/tooltip/action_target_tooltip.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/escoria-ui-keyboard-9verbs/tooltip/tooltip_action_target.gd" type="Script" id=1] + +[node name="tooltip" type="RichTextLabel"] +anchor_right = 1.0 +anchor_bottom = 1.0 +bbcode_enabled = true +bbcode_text = "[center][/center]" +scroll_active = false +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/addons/escoria-ui-keyboard-9verbs/tooltip/tooltip_action_target.gd b/addons/escoria-ui-keyboard-9verbs/tooltip/tooltip_action_target.gd new file mode 100644 index 000000000..330a3af5f --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/tooltip/tooltip_action_target.gd @@ -0,0 +1,31 @@ +extends ESCTooltip + +func update_tooltip_text(): + bbcode_text = "[center]" + bbcode_text += "[color=#" + color.to_html(false) + "]" + if !current_action.empty(): + bbcode_text += current_action + "\t" + bbcode_text += current_target + + if waiting_for_target2 and current_target2.empty(): + bbcode_text += "\t" + current_prep + + if !current_target2.empty(): + bbcode_text += "\t" + current_prep + "\t" + current_target2 + + bbcode_text += "[/color]" + bbcode_text += "[/center]" + +# push_align(RichTextLabel.ALIGN_CENTER) +# if !current_action.empty(): +# add_text(current_action + "\t") +# +# add_text(current_target) +# +# if waiting_for_target2 and current_target2.empty(): +# add_text("\t" + current_prep) +# +# if !current_target2.empty(): +# add_text("\t" + current_prep + "\t" + current_target2) +# +# pop() diff --git a/addons/escoria-ui-keyboard-9verbs/verbs_menu.gd b/addons/escoria-ui-keyboard-9verbs/verbs_menu.gd new file mode 100644 index 000000000..6db62eb5f --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/verbs_menu.gd @@ -0,0 +1,32 @@ +extends Control + +""" +This script is out of Escoria's scope. It controls the UI reaction to an +UI event (eg right click) to change the cursor accordingly. +""" + +var selected_action + +func _ready(): + for but in get_children(): + but.connect("pressed", self, "on_action_selected", [but.name]) + but.toggle_mode = true + +func on_action_selected(action: String): + if escoria.inputs_manager.input_mode != escoria.inputs_manager.INPUT_ALL: + unselect_actions() + return + + escoria.action_manager.set_current_action(action) + + for but in get_children(): + but.set_pressed(but.get_name() == action) + +func unselect_actions(): + for but in get_children(): + but.set_pressed(false) + +func set_by_name(action_name: String): + selected_action = action_name + for but in get_children(): + but.set_pressed(but.get_name() == action_name) diff --git a/addons/escoria-ui-keyboard-9verbs/verbs_menu.tscn b/addons/escoria-ui-keyboard-9verbs/verbs_menu.tscn new file mode 100644 index 000000000..abf7eabf9 --- /dev/null +++ b/addons/escoria-ui-keyboard-9verbs/verbs_menu.tscn @@ -0,0 +1,125 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/escoria-ui-keyboard-9verbs/verbs_menu.gd" type="Script" id=1] + +[node name="actions" type="GridContainer"] +margin_right = 493.0 +margin_bottom = 263.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +columns = 3 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="open" type="Button" parent="."] +margin_right = 161.0 +margin_bottom = 85.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = true +text = "Open" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="pickup" type="Button" parent="."] +margin_left = 165.0 +margin_right = 326.0 +margin_bottom = 85.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = true +text = "Pick up" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="push" type="Button" parent="."] +margin_left = 330.0 +margin_right = 491.0 +margin_bottom = 85.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = true +text = "Push" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="close" type="Button" parent="."] +margin_top = 89.0 +margin_right = 161.0 +margin_bottom = 174.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = true +text = "Close" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="look" type="Button" parent="."] +margin_left = 165.0 +margin_top = 89.0 +margin_right = 326.0 +margin_bottom = 174.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = true +text = "Look at" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="pull" type="Button" parent="."] +margin_left = 330.0 +margin_top = 89.0 +margin_right = 491.0 +margin_bottom = 174.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = true +text = "Pull" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="give" type="Button" parent="."] +margin_top = 178.0 +margin_right = 161.0 +margin_bottom = 263.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = true +text = "Give" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="use" type="Button" parent="."] +margin_left = 165.0 +margin_top = 178.0 +margin_right = 326.0 +margin_bottom = 263.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = true +text = "Use" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="talk" type="Button" parent="."] +margin_left = 330.0 +margin_top = 178.0 +margin_right = 491.0 +margin_bottom = 263.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = true +text = "Talk" +__meta__ = { +"_edit_use_anchors_": false +}