diff options
Diffstat (limited to 'client/gui/menus/menu.gd')
| -rw-r--r-- | client/gui/menus/menu.gd | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/client/gui/menus/menu.gd b/client/gui/menus/menu.gd index 00edd272..ddf16395 100644 --- a/client/gui/menus/menu.gd +++ b/client/gui/menus/menu.gd @@ -32,6 +32,7 @@ var parent_menu: Menu = null var previous_path = null # : String var open_since = 0 var exiting := false +var disabled := false func _ready(): open_since = Time.get_ticks_msec() @@ -62,7 +63,7 @@ var covered := false func submenu(path: String, data_ = null): var prev_focus = Global.focused_node if popup != null: return - _disable_recursive(self, true) + disabled = true; _update_disabled(self) covered = true await _menu_cover(true) popup = load(path).instantiate() @@ -75,19 +76,29 @@ func submenu(path: String, data_ = null): await _menu_cover(false) Global.focused_menu = self _menu_music() - _disable_recursive(self, false) + disabled = false; _update_disabled(self) if prev_focus != null: prev_focus.grab_focus() -func _disable_recursive(node: Node, state: bool): - if node is BaseButton: - var was_disabled: bool = state and node.disabled - if was_disabled: node.add_to_group("was_disabled") - node.disabled = state or node.is_in_group("was_disabled") - if not was_disabled: node.remove_from_group("was_disabled") - for c in node.get_children(): _disable_recursive(c, state) +func _update_disabled(node: Node): + if node is BaseButton: _update_button_disabled(node) + for c in node.get_children(): _update_disabled(c) + +func _update_button_disabled(node: BaseButton): + if disabled: + if node.disabled: node.add_to_group("disabled") + else: node.remove_from_group("disabled") + node.disabled = true + else: + node.disabled = node.is_in_group("disabled") + node.remove_from_group("disabled") + +func set_disabled(node: BaseButton, state: bool): + if state: node.add_to_group("disabled") + else: node.remove_from_group("disabled") + node.disabled = state or disabled func exit(): - _disable_recursive(self, true) + disabled = true; _update_disabled(self) if transition and transition.fading: push_error("menu exit() called twice") return @@ -108,7 +119,7 @@ func replace_menu(path: String, data_ = null, prev_path = null): # prev_path: St print("Replace menu: ", path) exiting = true if popup != null: await popup.exit() - _disable_recursive(self, true) + disabled = true; _update_disabled(self) await _menu_exit() var new_menu: Menu = load(path).instantiate() new_menu.data = data_ @@ -163,3 +174,7 @@ func exit_maybe() -> void: if time - open_since < 100: return Sound.play_click() exit() + +static func get_parent_menu(node: Node) -> Menu: + if node is Menu: return node + else: return Menu.get_parent_menu(node.get_parent()) |