aboutsummaryrefslogtreecommitdiff
path: root/client/gui/menus/menu.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/gui/menus/menu.gd')
-rw-r--r--client/gui/menus/menu.gd37
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())