diff --git a/game/ui/bags/InventoryGUI.gd b/game/ui/bags/InventoryGUI.gd index cd0ab234..161961cb 100644 --- a/game/ui/bags/InventoryGUI.gd +++ b/game/ui/bags/InventoryGUI.gd @@ -20,6 +20,9 @@ extends PanelContainer # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +export(NodePath) var opener_button_path : NodePath +var opener_button : BaseButton + export(PackedScene) var inventory_item_scene : PackedScene export(NodePath) var inventory_item_container_path : NodePath export(NodePath) var item_tooltip_path : NodePath @@ -33,6 +36,8 @@ var _player : Entity = null var _bag : Bag = null func _ready() -> void: + opener_button = get_node_or_null(opener_button_path) as BaseButton + _inventory_item_container = get_node(inventory_item_container_path) _tooltip = get_node(item_tooltip_path) @@ -122,12 +127,21 @@ func item_removed(bag: Bag, item: ItemInstance, slot_id: int) -> void: func item_swapped(bag: Bag, item1_slot : int, item2_slot: int) -> void: refresh_bags() -func on_visibility_changed() -> void: +func on_visibility_changed(): refresh_bags() - + + if opener_button: + if visible && !opener_button.pressed: + opener_button.pressed = true + return + + if !visible && opener_button.pressed: + opener_button.pressed = false func _on_BagButton_toggled(button_pressed): if button_pressed: - show() + if !visible: + show() else: - hide() + if visible: + hide() diff --git a/game/ui/player_ui/player_ui.tscn b/game/ui/player_ui/player_ui.tscn index 700a97bd..3456828f 100644 --- a/game/ui/player_ui/player_ui.tscn +++ b/game/ui/player_ui/player_ui.tscn @@ -275,7 +275,6 @@ keep_pressed_outside = true text = "Talent" [node name="CraftingButton" type="Button" parent="GUI/Buttons/HBoxContainer"] -visible = false margin_left = 181.0 margin_right = 226.0 margin_bottom = 45.0 @@ -288,8 +287,8 @@ keep_pressed_outside = true text = "Craft" [node name="LockButton" type="Button" parent="GUI/Buttons/HBoxContainer"] -margin_left = 181.0 -margin_right = 226.0 +margin_left = 226.0 +margin_right = 271.0 margin_bottom = 45.0 rect_min_size = Vector2( 45, 45 ) focus_mode = 0 @@ -331,8 +330,8 @@ __meta__ = { } [node name="Menu" type="Button" parent="GUI/Buttons/HBoxContainer"] -margin_left = 226.0 -margin_right = 271.0 +margin_left = 271.0 +margin_right = 316.0 margin_bottom = 45.0 rect_min_size = Vector2( 45, 45 ) focus_mode = 0 @@ -365,12 +364,14 @@ margin_left = 66.0 margin_top = 44.0 margin_right = 681.0 margin_bottom = 474.0 +opener_button_path = NodePath("../../Buttons/HBoxContainer/CharacterButton") [node name="SpellBookWindow" parent="GUI/Windows" instance=ExtResource( 17 )] visible = false margin_left = 60.0 margin_top = 50.0 margin_right = 561.0 +opener_button_path = NodePath("../../Buttons/HBoxContainer/SpellBookButton") [node name="TalentWindow" parent="GUI/Windows" instance=ExtResource( 11 )] visible = false @@ -380,6 +381,7 @@ margin_left = 62.0 margin_top = 54.0 margin_right = 656.0 margin_bottom = 513.0 +opener_button_path = NodePath("../../Buttons/HBoxContainer/TalentButton") [node name="CraftingWindow" parent="GUI/Windows" instance=ExtResource( 20 )] visible = false @@ -387,6 +389,7 @@ margin_left = 31.0 margin_top = 23.0 margin_right = -345.0 margin_bottom = -67.0 +opener_button_path = NodePath("../../Buttons/HBoxContainer/CraftingButton") [node name="Inventory" parent="GUI/Windows" instance=ExtResource( 15 )] visible = false @@ -394,6 +397,7 @@ margin_left = 56.0 margin_top = 69.0 margin_right = -422.0 margin_bottom = -109.0 +opener_button_path = NodePath("../../Buttons/HBoxContainer/BagButton") inventory_item_container_path = NodePath("../Inventory/VBoxContainer/HBoxContainer3/PanelContainer2/VBoxContainer/ScrollContainer/GridContainer") [node name="LootWindow" parent="GUI/Windows" instance=ExtResource( 19 )] diff --git a/game/ui/windows/CharacterWindow.gd b/game/ui/windows/CharacterWindow.gd index 0dcca183..08b058d2 100644 --- a/game/ui/windows/CharacterWindow.gd +++ b/game/ui/windows/CharacterWindow.gd @@ -1,19 +1,10 @@ extends PanelContainer +export(NodePath) var opener_button_path : NodePath +var opener_button : BaseButton -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - - -# Called when the node enters the scene tree for the first time. func _ready(): - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass + opener_button = get_node_or_null(opener_button_path) as BaseButton func _on_CharacterButton_toggled(button_pressed): @@ -24,4 +15,7 @@ func _on_CharacterButton_toggled(button_pressed): func _on_Button_pressed(): + if opener_button: + opener_button.pressed = false + hide() diff --git a/game/ui/windows/CraftingWindow.gd b/game/ui/windows/CraftingWindow.gd index c9e4e049..45a9df2d 100644 --- a/game/ui/windows/CraftingWindow.gd +++ b/game/ui/windows/CraftingWindow.gd @@ -20,6 +20,9 @@ extends PanelContainer # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +export(NodePath) var opener_button_path : NodePath +var opener_button : BaseButton + export(PackedScene) var item_entry_scene : PackedScene export(PackedScene) var recipe_selector_scene : PackedScene @@ -48,6 +51,9 @@ var _materials_container_main_on : Node var _materials_container_main_off : Node func _ready(): + opener_button = get_node_or_null(opener_button_path) as BaseButton + connect("visibility_changed", self, "on_visibility_changed") + _item_container = get_node(item_container_path) _tools_container = get_node(tools_container_path) _materials_container = get_node(materials_container_path) @@ -140,8 +146,19 @@ func select_recipe(recipe : CraftRecipe) -> void: ie.set_item(_player, ih) +func on_visibility_changed(): + if opener_button: + if visible && !opener_button.pressed: + opener_button.pressed = true + return + + if !visible && opener_button.pressed: + opener_button.pressed = false + func _on_CraftingButton_toggled(button_pressed): if button_pressed: - show() + if !visible: + show() else: - hide() + if visible: + hide() diff --git a/game/ui/windows/SpellBookWindow.gd b/game/ui/windows/SpellBookWindow.gd index 60814372..a7f64a51 100644 --- a/game/ui/windows/SpellBookWindow.gd +++ b/game/ui/windows/SpellBookWindow.gd @@ -20,6 +20,9 @@ extends Control # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +export(NodePath) var opener_button_path : NodePath +var opener_button : BaseButton + export(NodePath) var spell_entry_container_path : NodePath export(NodePath) var prev_button_path : NodePath export(NodePath) var next_button_path : NodePath @@ -45,6 +48,9 @@ var _character_class : EntityClassData var _spells : Array func _ready() -> void: + opener_button = get_node_or_null(opener_button_path) as BaseButton + connect("visibility_changed", self, "on_visibility_changed") + _spell_entries.clear() _spell_entry_container = get_node(spell_entry_container_path) @@ -191,9 +197,19 @@ class CustomSpellSorter: return true +func on_visibility_changed(): + if opener_button: + if visible && !opener_button.pressed: + opener_button.pressed = true + return + + if !visible && opener_button.pressed: + opener_button.pressed = false func _on_SpellBookButton_toggled(button_pressed): if button_pressed: - show() + if !visible: + show() else: - hide() + if visible: + hide() diff --git a/game/ui/windows/TalentWindow.gd b/game/ui/windows/TalentWindow.gd index 9b09c993..6eb8d743 100644 --- a/game/ui/windows/TalentWindow.gd +++ b/game/ui/windows/TalentWindow.gd @@ -20,6 +20,9 @@ extends PanelContainer # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +export(NodePath) var opener_button_path : NodePath +var opener_button : BaseButton + export(PackedScene) var spec_scene : PackedScene export(PackedScene) var spec_switcher_scene : PackedScene export(NodePath) var spec_container_path : NodePath @@ -32,6 +35,9 @@ var _data : EntityData var _player : Entity func _ready(): + opener_button = get_node_or_null(opener_button_path) as BaseButton + connect("visibility_changed", self, "on_visibility_changed") + _spec_container = get_node(spec_container_path) _spec_switcher_container = get_node(spec_switcher_path) @@ -96,10 +102,19 @@ func centity_data_changed(data: EntityData) -> void: s.set_spec(_player, spec, i) - +func on_visibility_changed(): + if opener_button: + if visible && !opener_button.pressed: + opener_button.pressed = true + return + + if !visible && opener_button.pressed: + opener_button.pressed = false func _on_TalentButton_toggled(button_pressed): if button_pressed: - show() + if !visible: + show() else: - hide() + if visible: + hide()