7var layout_manager = preload(
"res://scripts/systems/layoutManager/layout_manager.gd").new()
8var ui_flow_manager = preload(
"res://scripts/systems/uiFlowManager/ui_flow_manager.gd").new()
9const SettingsManagerScript = preload(
"res://scripts/systems/settingsManager/settings_manager.gd")
12var submenu_popups := []
13var suppress_submenu_return := false
14var last_pause_size :=
Vector2i(360, 520)
15var settings_manager_fallback
19func bind(owner_node:Node, actions:Dictionary) -> PopupPanel:
21 layout_manager.load_theme_file(
"res://data/themes/default.json")
22 popup = layout_manager.create_pause_overlay(actions)
23 owner.add_child(popup)
24 var settings_manager = _settings_manager()
25 if not settings_manager.settings_changed.is_connected(_on_settings_changed):
26 settings_manager.settings_changed.connect(_on_settings_changed)
27 _apply_current_theme()
32func show(size:Vector2i =
Vector2i(360, 520)) -> void:
33 if not _popup_valid():
35 last_pause_size = size
36 _apply_current_theme()
37 if _owner_valid()
and owner
is Control
and owner.is_inside_tree():
38 layout_manager.popup_centered_standard(popup, owner.get_viewport_rect().size, {
"size": size,
"minimum":
Vector2i(280, 180)})
41 if popup.is_inside_tree():
42 popup.popup_centered(size)
43 call_deferred(
"_focus_first_button")
53func show_submenu_popup(submenu:PopupPanel, size:Vector2i = Vector2i.ZERO) -> void:
54 if submenu == null
or not is_instance_valid(submenu):
57 if not submenu_popups.has(submenu):
58 submenu_popups.append(submenu)
59 if not submenu.popup_hide.is_connected(_on_submenu_hidden):
60 submenu.popup_hide.connect(_on_submenu_hidden)
62 if popup_size == Vector2i.ZERO:
63 popup_size = _default_submenu_size()
64 if _owner_valid()
and owner
is Control
and owner.is_inside_tree():
65 _apply_current_theme_to(submenu)
66 layout_manager.popup_centered_standard(submenu, owner.get_viewport_rect().size, {
"size": popup_size,
"minimum":
Vector2i(280, 180)})
68 submenu.size = popup_size
69 if submenu.is_inside_tree():
70 submenu.popup_centered(popup_size)
71 call_deferred(
"_focus_submenu", submenu)
75func hide_submenu_popup(submenu:PopupPanel) -> void:
76 if submenu == null
or not is_instance_valid(submenu):
78 suppress_submenu_return = true
80 suppress_submenu_return = false
84func return_from_submenu() -> void:
85 if suppress_submenu_return:
87 if not _owner_valid()
or not _popup_valid():
89 call_deferred(
"show", last_pause_size)
92func _focus_first_button() -> void:
93 if not _popup_valid():
95 ui_flow_manager.focus_first(popup)
98func _focus_submenu(submenu:PopupPanel) -> void:
99 if submenu == null
or not is_instance_valid(submenu):
101 ui_flow_manager.focus_first(submenu)
104func _on_submenu_hidden() -> void:
105 return_from_submenu()
108func _on_settings_changed(_settings:Dictionary) -> void:
109 if not _owner_valid()
or not _popup_valid():
111 _apply_current_theme()
114func _apply_current_theme() -> void:
115 if not _popup_valid():
117 var theme_id := str(_settings_manager().get_settings().get(
"theme",
"dark"))
118 _apply_current_theme_to(popup, theme_id)
119 for submenu
in submenu_popups:
120 _apply_current_theme_to(submenu, theme_id)
123func _apply_current_theme_to(target:PopupPanel, theme_id:String =
"") -> void:
124 if target == null
or not is_instance_valid(target):
126 var settings_manager = _settings_manager()
127 var resolved_theme := theme_id
if theme_id !=
"" else str(settings_manager.get_settings().get(
"theme",
"dark"))
128 layout_manager.apply_theme(target, resolved_theme)
129 settings_manager.apply_text_size(target)
132func _default_submenu_size() -> Vector2i:
133 if _owner_valid()
and owner
is Control:
134 var viewport_size = owner.get_viewport_rect().size
136 min(420, max(300, int(viewport_size.x) - 24)),
137 min(560, max(340, int(viewport_size.y) - 24))
142func _get_autoload(name:String):
143 var loop = Engine.get_main_loop()
144 if loop
is SceneTree:
145 return loop.root.get_node_or_null(name)
149func _settings_manager():
150 var manager = _get_autoload(
"SettingsManager")
153 if settings_manager_fallback == null:
154 settings_manager_fallback = SettingsManagerScript.new()
155 return settings_manager_fallback
159func dispose() -> void:
160 var settings_manager = _settings_manager()
161 if settings_manager.settings_changed.is_connected(_on_settings_changed):
162 settings_manager.settings_changed.disconnect(_on_settings_changed)
165 for submenu
in submenu_popups:
166 if submenu != null
and is_instance_valid(submenu)
and submenu.popup_hide.is_connected(_on_submenu_hidden):
167 submenu.popup_hide.disconnect(_on_submenu_hidden)
168 submenu_popups.clear()
173func _owner_valid() -> bool:
174 return owner != null
and is_instance_valid(owner)
177func _popup_valid() -> bool:
178 return popup != null
and is_instance_valid(popup)
Vector2i
Show the overlay with current theme and text settings applied.