summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-11-29 14:10:32 +0200
committerJan Tuomi <jan@jantuomi.fi>2025-11-29 14:10:32 +0200
commitb532e98ecdbd449da63962cc6db3feef62dbe857 (patch)
tree99acd309a6cf5e3348a3645fa9a3911a73c27892
parentcddd0a496fcc6404f1024c4e515f1e20a31a2d6c (diff)
Rework pause menu
-rw-r--r--docs/index.html2
-rw-r--r--docs/index.pckbin3865560 -> 4103672 bytes
-rw-r--r--docs/index.service.worker.js2
-rw-r--r--pause_menu.gd67
-rw-r--r--pause_menu_map.gd16
-rw-r--r--pause_menu_map.gd.uid1
-rw-r--r--pause_menu_page.gd2
-rw-r--r--pause_menu_page.gd.uid1
-rw-r--r--pause_menu_status.gd12
-rw-r--r--pause_menu_status.gd.uid1
-rw-r--r--pause_menu_system.gd13
-rw-r--r--pause_menu_system.gd.uid1
-rw-r--r--top.gd24
-rw-r--r--top.tscn16
-rw-r--r--transition_player.gd2
15 files changed, 102 insertions, 58 deletions
diff --git a/docs/index.html b/docs/index.html
index 1e16f0c..169027f 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -112,7 +112,7 @@ body {
<script src="index.js"></script>
<script>
-const GODOT_CONFIG = {"args":[],"canvasResizePolicy":2,"emscriptenPoolSize":8,"ensureCrossOriginIsolationHeaders":true,"executable":"index","experimentalVK":false,"fileSizes":{"index.pck":3865560,"index.wasm":38034280},"focusCanvas":true,"gdextensionLibs":[],"godotPoolSize":4,"serviceWorker":"index.service.worker.js"};
+const GODOT_CONFIG = {"args":[],"canvasResizePolicy":2,"emscriptenPoolSize":8,"ensureCrossOriginIsolationHeaders":true,"executable":"index","experimentalVK":false,"fileSizes":{"index.pck":4103672,"index.wasm":38034280},"focusCanvas":true,"gdextensionLibs":[],"godotPoolSize":4,"serviceWorker":"index.service.worker.js"};
const GODOT_THREADS_ENABLED = false;
const engine = new Engine(GODOT_CONFIG);
diff --git a/docs/index.pck b/docs/index.pck
index 2ef95fb..5d8229f 100644
--- a/docs/index.pck
+++ b/docs/index.pck
Binary files differ
diff --git a/docs/index.service.worker.js b/docs/index.service.worker.js
index 362e564..8042528 100644
--- a/docs/index.service.worker.js
+++ b/docs/index.service.worker.js
@@ -4,7 +4,7 @@
// Incrementing CACHE_VERSION will kick off the install event and force
// previously cached resources to be updated from the network.
/** @type {string} */
-const CACHE_VERSION = '1764413754|33126432540';
+const CACHE_VERSION = '1764418222|37594676000';
/** @type {string} */
const CACHE_PREFIX = 'MobileMetroidvan-sw-cache-';
const CACHE_NAME = CACHE_PREFIX + CACHE_VERSION;
diff --git a/pause_menu.gd b/pause_menu.gd
index e13d6d6..ce09867 100644
--- a/pause_menu.gd
+++ b/pause_menu.gd
@@ -1,50 +1,41 @@
class_name PauseMenu
extends CanvasLayer
-var active_map_room: MapRoom
-var active_page_index: int = 0
-@export var pages: Array[Node]
+var active_page_index: int
+var pages: Array[PauseMenuPage] = []
func _ready():
- deactivate()
- $System/QuitButton.grab_focus.call_deferred()
- $System/QuitButton.connect("pressed", _on_quit_button_pressed)
+ pages = []
+ var children = get_children()
+ for child in children:
+ if child is PauseMenuPage:
+ pages.push_back(child)
+ remove_child.call_deferred(child)
-func _process(_delta: float):
- if visible and Input.is_action_just_pressed("action"):
- active_page_index = (active_page_index + 1) % pages.size()
- refresh_page()
-
-func set_room_name(map_room_name: String):
- if active_map_room: active_map_room.unhighlight()
-
- active_map_room = $Map.get_node_or_null(map_room_name)
-
- if active_map_room:
- active_map_room.highlight()
- var pos = active_map_room.position
- var size = get_viewport().get_visible_rect().size
- var delta = Vector2(size.x / 2, size.y / 2)
- $Map.position = -pos + delta - active_map_room.size / 2
-
-func activate():
- active_page_index = 0
- visible = true
+func _on_tree_entered() -> void:
get_tree().paused = true
get_tree().call_group("ui_movement", "set_visible", false)
- refresh_page()
-
-func deactivate():
- visible = false
+
+ if pages.size() > 0:
+ set_page(0)
+
+func _exit_tree():
get_tree().paused = false
get_tree().call_group("ui_movement", "set_visible", true)
-func refresh_page():
- for i in range(pages.size()):
- pages[i].visible = (active_page_index == i)
+func _process(_delta: float):
+ if visible and Input.is_action_just_pressed("action"):
+ set_page((active_page_index + 1) % pages.size())
-func _on_quit_button_pressed() -> void:
- if not visible: return
- var top: Top = get_tree().root.get_node("Top")
- top.get_transition_player().room_transition(null, "res://room_main_menu.tscn", null)
- deactivate()
+func get_map() -> PauseMenuMap:
+ for page in pages:
+ if page is PauseMenuMap: return page
+
+ return null
+
+func set_page(i: int):
+ var prev_page = pages[active_page_index]
+ remove_child.call_deferred(prev_page)
+
+ active_page_index = i
+ add_child.call_deferred(pages[i])
diff --git a/pause_menu_map.gd b/pause_menu_map.gd
new file mode 100644
index 0000000..2f01ab4
--- /dev/null
+++ b/pause_menu_map.gd
@@ -0,0 +1,16 @@
+class_name PauseMenuMap
+extends PauseMenuPage
+
+var active_map_room: MapRoom
+
+func _on_tree_entered() -> void:
+ if active_map_room:
+ active_map_room.highlight()
+ var pos = active_map_room.position
+ var size = get_viewport().get_visible_rect().size
+ var delta = Vector2(size.x / 2, size.y / 2)
+ position = -pos + delta - active_map_room.size / 2
+
+func set_room_name(n: String):
+ if active_map_room: active_map_room.unhighlight()
+ active_map_room = get_node_or_null(n)
diff --git a/pause_menu_map.gd.uid b/pause_menu_map.gd.uid
new file mode 100644
index 0000000..1403f10
--- /dev/null
+++ b/pause_menu_map.gd.uid
@@ -0,0 +1 @@
+uid://cne4ie2ej80h6
diff --git a/pause_menu_page.gd b/pause_menu_page.gd
new file mode 100644
index 0000000..250112c
--- /dev/null
+++ b/pause_menu_page.gd
@@ -0,0 +1,2 @@
+@abstract class_name PauseMenuPage
+extends CanvasGroup
diff --git a/pause_menu_page.gd.uid b/pause_menu_page.gd.uid
new file mode 100644
index 0000000..bbb95df
--- /dev/null
+++ b/pause_menu_page.gd.uid
@@ -0,0 +1 @@
+uid://cc0ha3xofo5ju
diff --git a/pause_menu_status.gd b/pause_menu_status.gd
new file mode 100644
index 0000000..8411909
--- /dev/null
+++ b/pause_menu_status.gd
@@ -0,0 +1,12 @@
+class_name PauseMenuStatus
+extends PauseMenuPage
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+ pass # Replace with function body.
+
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _process(delta: float) -> void:
+ pass
diff --git a/pause_menu_status.gd.uid b/pause_menu_status.gd.uid
new file mode 100644
index 0000000..745ec63
--- /dev/null
+++ b/pause_menu_status.gd.uid
@@ -0,0 +1 @@
+uid://blwdf7vxrmw35
diff --git a/pause_menu_system.gd b/pause_menu_system.gd
new file mode 100644
index 0000000..404fe28
--- /dev/null
+++ b/pause_menu_system.gd
@@ -0,0 +1,13 @@
+class_name PauseMenuSystem
+extends PauseMenuPage
+
+func _on_tree_entered() -> void:
+ $QuitButton.grab_focus.call_deferred()
+ $QuitButton.connect("pressed", _on_quit_button_pressed)
+
+func _on_quit_button_pressed() -> void:
+ var menu: PauseMenu = get_parent()
+ var top: Top = menu.get_parent()
+
+ top.get_transition_player().room_transition(null, "res://room_main_menu.tscn", null)
+ top.handle_pause()
diff --git a/pause_menu_system.gd.uid b/pause_menu_system.gd.uid
new file mode 100644
index 0000000..60172c2
--- /dev/null
+++ b/pause_menu_system.gd.uid
@@ -0,0 +1 @@
+uid://ckxfshqn3pxqr
diff --git a/top.gd b/top.gd
index 9875eab..0049d55 100644
--- a/top.gd
+++ b/top.gd
@@ -5,13 +5,17 @@ const ROOM_MAIN_MENU: String = "res://room_main_menu.tscn"
const ROOM_NEW_GAME: String = "res://room_test1.tscn"
var active_room_name: String
+var pause_menu: PauseMenu
func _ready() -> void:
if not OS.is_debug_build():
$DebugInfo.queue_free()
print("data_dir: \"%s\"" % OS.get_user_data_dir())
- $PauseMenu.deactivate()
+
+ pause_menu = $PauseMenu
+ remove_child.call_deferred(pause_menu)
+
get_tree().call_group("ui_movement", "set_visible", false)
get_tree().call_group("ui_menu", "set_visible", false)
get_tree().call_group("ui_action", "set_visible", false)
@@ -24,10 +28,7 @@ func _ready() -> void:
func _process(_delta: float):
if Input.is_action_just_pressed("menu"):
- if $PauseMenu.visible:
- close_pause_menu()
- elif active_room_name != "MainMenu":
- open_pause_menu()
+ handle_pause()
func replace_active_room(new_room: Node, on_changed: Callable):
var current_room = get_node("ActiveRoom")
@@ -45,17 +46,14 @@ func replace_active_room(new_room: Node, on_changed: Callable):
new_room.process_mode = Node.PROCESS_MODE_PAUSABLE
add_child(new_room)
-func get_pause_menu() -> PauseMenu:
- return $PauseMenu
-
func get_transition_player() -> TransitionPlayer:
return $TransitionPlayer
-func open_pause_menu():
- $PauseMenu.activate()
-
-func close_pause_menu():
- $PauseMenu.deactivate()
+func handle_pause():
+ if pause_menu.is_inside_tree():
+ remove_child.call_deferred(pause_menu)
+ else:
+ add_child.call_deferred(pause_menu)
# Save state logic
diff --git a/top.tscn b/top.tscn
index 17ab08d..66ec345 100644
--- a/top.tscn
+++ b/top.tscn
@@ -1,12 +1,15 @@
-[gd_scene load_steps=13 format=3 uid="uid://cey3jxnpmommt"]
+[gd_scene load_steps=16 format=3 uid="uid://cey3jxnpmommt"]
[ext_resource type="Material" uid="uid://bb4b8jm2tyy81" path="res://mat_palette.tres" id="1_edsjh"]
[ext_resource type="Script" uid="uid://dxbspy72bg0db" path="res://top.gd" id="1_on2c2"]
[ext_resource type="Script" uid="uid://cph2apstgper1" path="res://palette_shader.gd" id="5_ch5ua"]
[ext_resource type="PackedScene" uid="uid://cciwccvljuuyq" path="res://touch_screen_ui.tscn" id="5_edsjh"]
+[ext_resource type="Script" uid="uid://cne4ie2ej80h6" path="res://pause_menu_map.gd" id="5_lnnys"]
[ext_resource type="Script" uid="uid://civ5a43u5151a" path="res://transition_player.gd" id="6_ch5ua"]
[ext_resource type="Script" uid="uid://dh0b4xa4f8h1o" path="res://pause_menu.gd" id="6_ql50d"]
[ext_resource type="PackedScene" uid="uid://clm2kocuhjqbb" path="res://map_room.tscn" id="7_ql50d"]
+[ext_resource type="Script" uid="uid://blwdf7vxrmw35" path="res://pause_menu_status.gd" id="7_u70i3"]
+[ext_resource type="Script" uid="uid://ckxfshqn3pxqr" path="res://pause_menu_system.gd" id="8_2tr3m"]
[ext_resource type="Script" uid="uid://bwdk675n1q0dh" path="res://debug_info.gd" id="8_7c27k"]
[sub_resource type="Animation" id="Animation_58ij3"]
@@ -155,9 +158,8 @@ libraries = {
speed_scale = 3.0
script = ExtResource("6_ch5ua")
-[node name="PauseMenu" type="CanvasLayer" parent="." node_paths=PackedStringArray("pages")]
+[node name="PauseMenu" type="CanvasLayer" parent="."]
script = ExtResource("6_ql50d")
-pages = [NodePath("Map"), NodePath("Status"), NodePath("System")]
[node name="Bg" type="ColorRect" parent="PauseMenu"]
offset_right = 192.0
@@ -166,6 +168,7 @@ mouse_filter = 2
color = Color(0, 0.019607844, 0.039215688, 0.88235295)
[node name="Map" type="CanvasGroup" parent="PauseMenu"]
+script = ExtResource("5_lnnys")
[node name="RoomTest1" parent="PauseMenu/Map" instance=ExtResource("7_ql50d")]
offset_left = 63.0
@@ -195,8 +198,8 @@ offset_bottom = 65.0
metadata/_edit_use_anchors_ = true
[node name="Status" type="CanvasGroup" parent="PauseMenu"]
-visible = false
scale = Vector2(0.25, 0.25)
+script = ExtResource("7_u70i3")
[node name="Label" type="Label" parent="PauseMenu/Status"]
offset_left = 320.0
@@ -207,6 +210,7 @@ text = "Status page"
[node name="System" type="CanvasGroup" parent="PauseMenu"]
scale = Vector2(0.25, 0.25)
+script = ExtResource("8_2tr3m")
[node name="QuitButton" type="Button" parent="PauseMenu/System"]
offset_left = 300.0
@@ -246,3 +250,7 @@ script = ExtResource("8_7c27k")
offset_right = 40.0
offset_bottom = 23.0
text = "debug info"
+
+[connection signal="tree_entered" from="PauseMenu" to="PauseMenu" method="_on_tree_entered"]
+[connection signal="tree_entered" from="PauseMenu/Map" to="PauseMenu/Map" method="_on_tree_entered"]
+[connection signal="tree_entered" from="PauseMenu/System" to="PauseMenu/System" method="_on_tree_entered"]
diff --git a/transition_player.gd b/transition_player.gd
index 56fe756..0d35dc7 100644
--- a/transition_player.gd
+++ b/transition_player.gd
@@ -37,7 +37,7 @@ func _transition_start():
while _transition_room == null:
await get_tree().create_timer(0.1).timeout
- top.get_pause_menu().set_room_name(_transition_room.name)
+ top.pause_menu.get_map().set_room_name(_transition_room.name)
top.replace_active_room(_transition_room, _on_room_changed)
func _on_room_changed():