gd: added menu template
This commit is contained in:
33
menus/scenes/menus/level_select_menu/level_select_menu.gd
Normal file
33
menus/scenes/menus/level_select_menu/level_select_menu.gd
Normal file
@@ -0,0 +1,33 @@
|
||||
extends Control
|
||||
|
||||
## Loads a simple ItemList node within a margin container. SceneLister updates
|
||||
## the available scenes in the directory provided. Activating a level will update
|
||||
## the GameState's current_level, and emit a signal. The main menu node will trigger
|
||||
## a load action from that signal.
|
||||
|
||||
@onready var level_buttons_container: ItemList = %LevelButtonsContainer
|
||||
@onready var scene_lister: SceneLister = $SceneLister
|
||||
|
||||
signal level_selected
|
||||
|
||||
func _ready() -> void:
|
||||
add_levels_to_container()
|
||||
|
||||
## A fresh level list is propgated into the ItemList, and the file names are cleaned
|
||||
func add_levels_to_container() -> void:
|
||||
level_buttons_container.clear()
|
||||
var max_level_reached := GameState.get_max_level_reached()
|
||||
var level_iter := 0
|
||||
for file_path in scene_lister.files:
|
||||
if level_iter > max_level_reached : break
|
||||
level_iter += 1
|
||||
var file_name := file_path.get_file() # e.g., "level_1.tscn"
|
||||
file_name = file_name.trim_suffix(".tscn") # Remove the ".tscn" extension
|
||||
file_name = file_name.replace("_", " ") # Replace underscores with spaces
|
||||
file_name = file_name.capitalize() # Convert to proper case
|
||||
var button_name := str(file_name)
|
||||
level_buttons_container.add_item(button_name)
|
||||
|
||||
func _on_level_buttons_container_item_activated(index: int) -> void:
|
||||
GameState.set_current_level(index)
|
||||
level_selected.emit()
|
||||
@@ -0,0 +1 @@
|
||||
uid://x734txqgcn84
|
||||
49
menus/scenes/menus/level_select_menu/level_select_menu.tscn
Normal file
49
menus/scenes/menus/level_select_menu/level_select_menu.tscn
Normal file
@@ -0,0 +1,49 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://fybssggvts5q"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://x734txqgcn84" path="res://menus/scenes/menus/level_select_menu/level_select_menu.gd" id="1_wxb4a"]
|
||||
[ext_resource type="Script" uid="uid://1nf36h0gms3q" path="res://addons/maaacks_game_template/base/scripts/capture_focus.gd" id="2_oixp6"]
|
||||
[ext_resource type="Script" uid="uid://wjq7li836lwj" path="res://addons/maaacks_game_template/extras/scripts/scene_lister.gd" id="3_stdqw"]
|
||||
|
||||
[node name="LevelSelectMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_wxb4a")
|
||||
|
||||
[node name="Control" type="Control" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("2_oixp6")
|
||||
|
||||
[node name="LevelButtonsContainer" type="ItemList" parent="Control"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(400, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -200.0
|
||||
offset_top = -17.5
|
||||
offset_right = 200.0
|
||||
offset_bottom = 17.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
auto_height = true
|
||||
item_count = 1
|
||||
item_0/text = "1 - ExampleLevel"
|
||||
|
||||
[node name="SceneLister" type="Node" parent="."]
|
||||
script = ExtResource("3_stdqw")
|
||||
files = Array[String](["res://menus/scenes/game_scene/levels/level_1.tscn", "res://menus/scenes/game_scene/levels/level_2.tscn", "res://menus/scenes/game_scene/levels/level_3.tscn"])
|
||||
directory = "res://menus/scenes/game_scene/levels"
|
||||
|
||||
[connection signal="item_activated" from="Control/LevelButtonsContainer" to="." method="_on_level_buttons_container_item_activated"]
|
||||
Reference in New Issue
Block a user