From 59bed24acd44c5c6e1278a025b0e87f9ffa1f104 Mon Sep 17 00:00:00 2001 From: Taevas Date: Thu, 24 Apr 2025 14:54:54 +0200 Subject: [PATCH] simple level selection menu, change level logic (#3) --- elements/player.tscn | 23 ++-- elements/tree.tscn | 1 + gui/timer.tscn | 34 +++--- index.tscn | 102 ++++++------------ levels/base/level.tscn | 16 ++- levels/forest/level.tscn | 16 ++- levels/level.gd | 9 +- levels/music.gd | 4 +- levels/night/level.tscn | 22 +++- .../{start_menu.tscn => initial_menu.tscn} | 2 +- menus/main/level_selection_menu.tscn | 42 ++++++++ menus/main/{area.tscn => main_menu.tscn} | 60 ++++++----- menus/menu.tscn | 2 + 13 files changed, 199 insertions(+), 134 deletions(-) rename menus/main/{start_menu.tscn => initial_menu.tscn} (97%) create mode 100644 menus/main/level_selection_menu.tscn rename menus/main/{area.tscn => main_menu.tscn} (69%) diff --git a/elements/player.tscn b/elements/player.tscn index 54b3132..c377c79 100644 --- a/elements/player.tscn +++ b/elements/player.tscn @@ -4,7 +4,13 @@ script/source = "class_name Player extends Node3D -var velocity: Vector3 = Vector3(0, 0, 0) +signal velocity_change +var velocity := 0.0: + get: return velocity + set(value): + if value != velocity: + velocity_change.emit(value) + velocity = value func _physics_process(_delta: float) -> void: $SpotLightMain.position = $Sphere.position + Vector3(0, 5, 0) @@ -13,22 +19,21 @@ func _physics_process(_delta: float) -> void: $SpotLightRight.position = $Sphere.position $SpotLightBottom.position = $Sphere.position - ## Keep the ball at the center of the camera, at a distance + # Keep the ball at the center of the camera, at a distance $Camera.position = $Sphere.position + Vector3(0, 0, 15) - ## Angle of the camera, so the player can see where the ball is going - velocity = $Sphere.linear_velocity - var desired_x = max(min(velocity.y, 35), -35) - var desired_y = max(min(-velocity.x, 50), -50) + # Angle of the camera, so the player can see where the ball is going + velocity = abs($Sphere.linear_velocity.x) + abs($Sphere.linear_velocity.y) + var desired_x = max(min($Sphere.linear_velocity.y, 35), -35) + var desired_y = max(min(-$Sphere.linear_velocity.x, 50), -50) var difference_x = $Camera.rotation_degrees.x - desired_x var difference_y = $Camera.rotation_degrees.y - desired_y $Camera.rotation_degrees.x -= max(min(difference_x / 2, 3), -3) $Camera.rotation_degrees.y -= max(min(difference_y / 2, 3), -3) - ## FOV of the camera, so it unzooms more at higher velocities + # FOV of the camera, so it unzooms more at higher velocities const default_fov = 75 - var total_velocity = abs(velocity.x) + abs(velocity.y) - $Camera.fov = default_fov + (total_velocity / 12) + $Camera.fov = default_fov + (velocity / 12) " [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_vumbr"] diff --git a/elements/tree.tscn b/elements/tree.tscn index 8d9690a..771ea82 100644 --- a/elements/tree.tscn +++ b/elements/tree.tscn @@ -29,6 +29,7 @@ vertex_color_use_as_albedo = true albedo_color = Color(0.212217, 0.468618, 0, 1) [node name="Tree" type="Node3D"] +physics_interpolation_mode = 2 script = SubResource("GDScript_tbkod") [node name="Dirt" type="CSGBox3D" parent="."] diff --git a/gui/timer.tscn b/gui/timer.tscn index ac9f85d..059370f 100644 --- a/gui/timer.tscn +++ b/gui/timer.tscn @@ -77,23 +77,6 @@ tracks/0/keys = { "values": [Vector2(1, 1)] } -[sub_resource type="Animation" id="Animation_2a86r"] -resource_name = "scale_linear" -length = 0.25 -step = 0.25 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:scale") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.25), -"transitions": PackedFloat32Array(1, 1), -"update": 0, -"values": [Vector2(1, 1), Vector2(1.2, 1.2)] -} - [sub_resource type="Animation" id="Animation_houb3"] resource_name = "scale_cubic" length = 0.25 @@ -111,6 +94,23 @@ tracks/0/keys = { "values": [Vector2(1, 1), Vector2(1.2, 1.2)] } +[sub_resource type="Animation" id="Animation_2a86r"] +resource_name = "scale_linear" +length = 0.25 +step = 0.25 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.25), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.2, 1.2)] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_jmgpn"] _data = { &"RESET": SubResource("Animation_m1tld"), diff --git a/index.tscn b/index.tscn index cfef63e..eff4230 100644 --- a/index.tscn +++ b/index.tscn @@ -11,13 +11,10 @@ script/source = "extends Node var playing: bool = false var changing_level: bool = false -var current_level_int: int = 0 -var levels = [ - preload(\"res://levels/base/level.tscn\"), - preload(\"res://levels/forest/level.tscn\"), - preload(\"res://levels/night/level.tscn\"), -] -var area_resource = preload(\"res://menus/main/area.tscn\") +var main_menu: Node +var current_level: Level + +const res_main_menu = preload(\"res://menus/main/main_menu.tscn\") @onready var gui_timer := $GUI/TopLeft/Timer @onready var gui_speed := $GUI/TopRight/Speed @@ -40,34 +37,31 @@ func _ready() -> void: pause_menu.connect(\"request_fullscreen\", fullscreen_game) pause_menu.connect(\"request_restart\", restart_level) - launch_area() + set_main_menu() -func launch_area(): +func set_main_menu(): Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) - var area := area_resource.instantiate() - area.connect(\"request_start\", start_game) - $Levels.add_child(area) - -## Get all the levels that are currently being played! -## In theory, there should ever be only zero or one, -## but it turns out it's more simple to handle things by using Arrays. -func get_current_levels() -> Array[Level]: - var children := $Levels.get_children(true) - var current_levels: Array[Level] = [] - for child in children: - if is_instance_of(child, Level): - current_levels.push_back(child) - return current_levels + main_menu = res_main_menu.instantiate() + main_menu.connect(\"request_play_level\", start_level) + add_child(main_menu) func start_level(level_scene: PackedScene) -> void: - $VictoryScreen.hide() - var level = level_scene.instantiate() - $Levels.add_child(level) - level.connect(\"completed\", stop_level) - level.connect(\"ring_collected\", func(): - gui_rings.remaining_rings = len(level.rings) - level.finished_rings_count + if is_instance_valid(current_level): + current_level.queue_free() + if is_instance_valid(main_menu): + main_menu.queue_free() + + current_level = level_scene.instantiate() + add_child(current_level) + current_level.connect(\"completed\", finish_current_level) + current_level.connect(\"ring_collected\", func(): + gui_rings.remaining_rings = len(current_level.rings) - current_level.finished_rings_count ) - gui_rings.remaining_rings = len(level.rings) - level.finished_rings_count + gui_rings.remaining_rings = len(current_level.rings) - current_level.finished_rings_count + + $GUI.show() + Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) + playing = true PhysicsServer3D.area_set_param( get_viewport().find_world_3d().space, @@ -78,7 +72,7 @@ func start_level(level_scene: PackedScene) -> void: gui_timer.seconds_spent_level_attempt = 0.0 gui_timer.enabled = true -func stop_level() -> void: +func finish_current_level() -> void: gui_timer.enabled = false PhysicsServer3D.area_set_param(get_viewport().find_world_3d().space, PhysicsServer3D.AREA_PARAM_GRAVITY, 1) playing = false @@ -86,51 +80,27 @@ func stop_level() -> void: SaveFiles.change_property(\"played_for\", gui_timer.seconds_spent_total, SaveFiles.selected_file) var save_file_data = SaveFiles.read(SaveFiles.selected_file) - var property_name := \"best_time_for_level_\" + str(current_level_int) + var property_name := current_level.id + \"_best_time\" if !save_file_data.has(property_name) or save_file_data[property_name] is not float or save_file_data[property_name] > gui_timer.seconds_spent_level_attempt: SaveFiles.change_property(property_name, gui_timer.seconds_spent_level_attempt, SaveFiles.selected_file) - var current_levels = get_current_levels() - for level in current_levels: - level.music.fadeOut(2) - await get_tree().create_timer(2).timeout - level.queue_free() + current_level.music.fadeOut(2) + await get_tree().create_timer(2).timeout + current_level.queue_free() - if len(levels) > current_level_int + 1: - current_level_int += 1 - start_level(levels[current_level_int]) - else: - win_game() + win_game() func win_game() -> void: $VictoryScreen.show() await get_tree().create_timer(2).timeout - launch_area() + set_main_menu() $VictoryScreen.hide() func restart_level() -> void: - var current_levels := get_current_levels() - if len(current_levels) && !changing_level: - pause_game(false) - changing_level = true - - for level in current_levels: - level.queue_free() - start_level(levels[current_level_int]) - -func start_game() -> void: - current_level_int = 0 - - var current_levels = $Levels.get_children(true) - for level in current_levels: - level.queue_free() - - $GUI.show() - Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) - start_level(levels[current_level_int]) + return #idk yet func pause_game(to_pause: bool) -> void: - if !len(get_current_levels()) or changing_level: + if is_instance_valid(current_level) or changing_level: return SaveFiles.change_property(\"played_for\", gui_timer.seconds_spent_total, SaveFiles.selected_file) @@ -153,9 +123,7 @@ func fullscreen_game() -> void: DisplayServer.window_set_mode(DisplayServer.WindowMode.WINDOW_MODE_WINDOWED) func _process(_delta: float) -> void: - var current_levels = get_current_levels() - if len(current_levels): - var current_level = current_levels[0] + if is_instance_valid(current_level): gui_speed.ball_velocity = current_level.velocity func _input(_event: InputEvent) -> void: @@ -246,8 +214,6 @@ label_settings = SubResource("LabelSettings_1bs00") horizontal_alignment = 1 vertical_alignment = 1 -[node name="Levels" type="Node" parent="."] - [node name="PauseMenu" parent="." instance=ExtResource("4_3bfj3")] [node name="DevInfos" type="Label" parent="."] diff --git a/levels/base/level.tscn b/levels/base/level.tscn index 0683839..03d1a09 100644 --- a/levels/base/level.tscn +++ b/levels/base/level.tscn @@ -1,12 +1,22 @@ [gd_scene load_steps=12 format=3 uid="uid://ovtknjyj83gh"] -[ext_resource type="Script" uid="uid://w3fetao1pegm" path="res://levels/level.gd" id="1_rj40i"] [ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="2_b00jj"] [ext_resource type="PackedScene" uid="uid://cpm3laywhlbq5" path="res://elements/ring.tscn" id="3_hel5x"] [ext_resource type="PackedScene" uid="uid://dw0xl8644x166" path="res://elements/gravity.tscn" id="3_muudg"] [ext_resource type="PackedScene" uid="uid://c77bli40240nk" path="res://elements/sign.tscn" id="4_atq6y"] [ext_resource type="PackedScene" uid="uid://dnuakh7n3fuij" path="res://levels/base/music.tscn" id="4_uq42r"] +[sub_resource type="GDScript" id="GDScript_1yugx"] +script/source = "extends Level + +func _init() -> void: + self.id = \"base\" + +func _on_player_velocity_change(new_velocity: float) -> void: + self.velocity = new_velocity + self.music.adaptInstrumentsToVelocity(new_velocity * 1.5) +" + [sub_resource type="Gradient" id="Gradient_hs6gw"] [sub_resource type="GradientTexture2D" id="GradientTexture2D_hyysp"] @@ -30,7 +40,7 @@ ambient_light_color = Color(1, 1, 1, 1) reflected_light_source = 2 [node name="Base" type="Node3D"] -script = ExtResource("1_rj40i") +script = SubResource("GDScript_1yugx") metadata/_custom_type_script = "uid://w3fetao1pegm" [node name="Gravity" parent="." instance=ExtResource("3_muudg")] @@ -155,6 +165,8 @@ transform = Transform3D(0.0172464, 0.899835, 0, -0.899835, 0.0172464, 0, 0, 0, 0 [node name="Ring13" parent="Rings" instance=ExtResource("3_hel5x")] transform = Transform3D(0.0114976, 0.59989, 0, -0.59989, 0.0114976, 0, 0, 0, 0.6, -414.274, 8.64172, 0) +[connection signal="velocity_change" from="Player" to="." method="_on_player_velocity_change"] + [editable path="Signs/Sign"] [editable path="Signs/Sign7"] [editable path="Signs/Sign2"] diff --git a/levels/forest/level.tscn b/levels/forest/level.tscn index 36176ba..e12a221 100644 --- a/levels/forest/level.tscn +++ b/levels/forest/level.tscn @@ -1,6 +1,5 @@ [gd_scene load_steps=11 format=3 uid="uid://e1761h6d522a"] -[ext_resource type="Script" uid="uid://w3fetao1pegm" path="res://levels/level.gd" id="1_fdxcj"] [ext_resource type="PackedScene" uid="uid://dw0xl8644x166" path="res://elements/gravity.tscn" id="2_gxmta"] [ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="2_mjogx"] [ext_resource type="PackedScene" uid="uid://cakmsiye3hjfe" path="res://levels/forest/music.tscn" id="3_n1xsx"] @@ -8,6 +7,17 @@ [ext_resource type="PackedScene" uid="uid://da6lkdiskdh8v" path="res://elements/tree.tscn" id="6_1e514"] [ext_resource type="PackedScene" uid="uid://c77bli40240nk" path="res://elements/sign.tscn" id="6_ifogr"] +[sub_resource type="GDScript" id="GDScript_mqwxc"] +script/source = "extends Level + +func _init() -> void: + self.id = \"forest\" + +func _on_player_velocity_change(new_velocity: float) -> void: + self.velocity = new_velocity + self.music.adaptInstrumentsToVelocity(new_velocity) +" + [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_grcut"] sky_top_color = Color(0, 0.504542, 0.579919, 1) sky_horizon_color = Color(9.62615e-08, 0.776269, 0.496436, 1) @@ -29,7 +39,7 @@ ambient_light_color = Color(1, 1, 1, 1) reflected_light_source = 2 [node name="Forest" type="Node3D"] -script = ExtResource("1_fdxcj") +script = SubResource("GDScript_mqwxc") metadata/_custom_type_script = "uid://w3fetao1pegm" [node name="Gravity" parent="." instance=ExtResource("2_gxmta")] @@ -261,4 +271,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -218.208, 206.247, 0) [node name="Ring23" parent="Rings" instance=ExtResource("4_p8yhq")] transform = Transform3D(0.939693, 0.34202, 0, -0.34202, 0.939693, 0, 0, 0, 1, -1018.15, -96.9134, 0) +[connection signal="velocity_change" from="Player" to="." method="_on_player_velocity_change"] + [editable path="Sign"] diff --git a/levels/level.gd b/levels/level.gd index 77f9795..2d386b7 100644 --- a/levels/level.gd +++ b/levels/level.gd @@ -4,13 +4,15 @@ extends Node3D signal ring_collected signal completed -var seconds_spent: float = 0.00 +## Lowercase, spaceless name of the level +var id: String var music: Music var velocity: float = 0.0 var rings: Array[Ring] = [] var finished_rings_count: int = 0 func _ready() -> void: + assert(len(id) > 0, self.name + " has no id!") var children = get_children() for child in children: if is_instance_of(child, Music): @@ -31,8 +33,3 @@ func collect_ring(): if finished_rings_count >= len(rings): completed.emit() - -func _process(delta: float) -> void: - seconds_spent += delta - velocity = abs($Player.velocity.x) + abs($Player.velocity.y) - music.adaptInstrumentsToVelocity(velocity, delta) diff --git a/levels/music.gd b/levels/music.gd index 1d14740..a11f3c7 100644 --- a/levels/music.gd +++ b/levels/music.gd @@ -40,7 +40,9 @@ func changeVolume(db: float) -> void: AudioServer.set_bus_volume_db(bus_index, db + Settings.volume_music) AudioServer.set_bus_mute(bus_index, Settings.volume_music <= -15.0) -func adaptInstrumentsToVelocity(velocity: float, delta: float) -> void: +func adaptInstrumentsToVelocity(velocity: float) -> void: + ## temp + const delta = 0.00833333333333 var instruments_needed = floor(velocity / 8) var instruments_playing = instruments.filter(func(i: AudioStreamPlayer): return i.volume_db > -50) diff --git a/levels/night/level.tscn b/levels/night/level.tscn index 08f79de..76c77a7 100644 --- a/levels/night/level.tscn +++ b/levels/night/level.tscn @@ -1,6 +1,5 @@ [gd_scene load_steps=14 format=3 uid="uid://drnqmu4lka22d"] -[ext_resource type="Script" uid="uid://w3fetao1pegm" path="res://levels/level.gd" id="1_3m1pa"] [ext_resource type="PackedScene" uid="uid://drfy3vhe6skp1" path="res://levels/night/music.tscn" id="1_npc74"] [ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="2_bc1ig"] [ext_resource type="PackedScene" uid="uid://dw0xl8644x166" path="res://elements/gravity.tscn" id="2_lfplq"] @@ -9,6 +8,21 @@ [ext_resource type="PackedScene" uid="uid://b4jtpua36m6b1" path="res://elements/star.tscn" id="7_ltcl0"] [ext_resource type="PackedScene" uid="uid://da6lkdiskdh8v" path="res://elements/tree.tscn" id="8_kgstj"] +[sub_resource type="GDScript" id="GDScript_akhnt"] +script/source = "extends Level + +func _init() -> void: + self.id = \"night\" + +func _process(delta: float) -> void: + $Tree.rotate_x(delta / 3) + $Tree.rotate_y(delta) + +func _on_player_velocity_change(new_velocity: float) -> void: + self.velocity = new_velocity + self.music.adaptInstrumentsToVelocity(new_velocity * 2) +" + [sub_resource type="Gradient" id="Gradient_x6q8u"] [sub_resource type="GradientTexture1D" id="GradientTexture1D_lu6nv"] @@ -28,7 +42,7 @@ ambient_light_color = Color(1, 1, 1, 1) reflected_light_source = 2 [node name="Night" type="Node3D"] -script = ExtResource("1_3m1pa") +script = SubResource("GDScript_akhnt") metadata/_custom_type_script = "uid://w3fetao1pegm" [node name="Gravity" parent="." instance=ExtResource("2_lfplq")] @@ -193,7 +207,7 @@ transform = Transform3D(-1.31134e-07, -3, 0, 3, -1.31134e-07, 0, 0, 0, 3, -104.2 transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, -12.3896, -2, 0) [node name="Tree" parent="." instance=ExtResource("8_kgstj")] -transform = Transform3D(-3.79443, -7.04289, 0, 7.04289, -3.79443, 0, 0, 0, 8, 28.958, -413.185, -93.8242) +transform = Transform3D(-3.79271, -7.04382, 0, 7.04382, -3.79271, 0, 0, 0, 8, 28.958, -413.185, -93.8242) [node name="Signs" type="Node3D" parent="."] @@ -327,6 +341,8 @@ transform = Transform3D(-0.99693, 0.0731445, -0.0279554, -0.0555776, -0.912445, [node name="Star32" parent="Stars" instance=ExtResource("7_ltcl0")] transform = Transform3D(-0.99693, 0.0731445, -0.0279554, -0.0555776, -0.912445, -0.405407, -0.055161, -0.402609, 0.913709, 0.952739, 0.24193, 7.10684) +[connection signal="velocity_change" from="Player" to="." method="_on_player_velocity_change"] + [editable path="Signs/Sign"] [editable path="Signs/Sign4"] [editable path="Signs/Sign2"] diff --git a/menus/main/start_menu.tscn b/menus/main/initial_menu.tscn similarity index 97% rename from menus/main/start_menu.tscn rename to menus/main/initial_menu.tscn index f62f59a..0df392b 100644 --- a/menus/main/start_menu.tscn +++ b/menus/main/initial_menu.tscn @@ -16,7 +16,7 @@ func _on_btn_exit_pressed() -> void: get_tree().quit() " -[node name="StartMenu" type="Control"] +[node name="InitialMenu" type="Control"] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 diff --git a/menus/main/level_selection_menu.tscn b/menus/main/level_selection_menu.tscn new file mode 100644 index 0000000..45b6a11 --- /dev/null +++ b/menus/main/level_selection_menu.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=2 format=3 uid="uid://d3b12iqla7uh6"] + +[sub_resource type="GDScript" id="GDScript_rmgh7"] +script/source = "extends Control + +signal request_play_level + +const levels = [ + preload(\"res://levels/base/level.tscn\"), + preload(\"res://levels/forest/level.tscn\"), + preload(\"res://levels/night/level.tscn\"), +] +var selected_level := -1 + +func _ready() -> void: + for i in len(levels): + var btn := Button.new() + btn.text = \"Level \" + str(i + 1) + btn.connect(\"pressed\", func(): request_play_level.emit(levels[i])) + $VBoxContainer/Carousel.add_child(btn) +" + +[node name="LevelSelectionMenu" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = SubResource("GDScript_rmgh7") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Carousel" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 +alignment = 1 diff --git a/menus/main/area.tscn b/menus/main/main_menu.tscn similarity index 69% rename from menus/main/area.tscn rename to menus/main/main_menu.tscn index 0759372..87a94da 100644 --- a/menus/main/area.tscn +++ b/menus/main/main_menu.tscn @@ -1,38 +1,48 @@ [gd_scene load_steps=10 format=3 uid="uid://ikeidrgprk8k"] -[ext_resource type="PackedScene" uid="uid://wlhsarkeqe8r" path="res://menus/main/panel.tscn" id="1_qfa5o"] -[ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="2_0jxef"] +[ext_resource type="PackedScene" uid="uid://wlhsarkeqe8r" path="res://menus/main/panel.tscn" id="1_5vmsf"] +[ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="2_2rexg"] [sub_resource type="GDScript" id="GDScript_bt14i"] script/source = "extends Node3D -signal request_start - -var start_menu = preload(\"res://menus/main/start_menu.tscn\") -var save_file_manager = preload(\"res://menus/main/save_file_manager.tscn\") -var settings_menu = preload(\"res://menus/main/settings_menu.tscn\") +signal request_play_level +# Display on Panel 1 +const res_initial_menu = preload(\"res://menus/main/initial_menu.tscn\") func _ready() -> void: $Menus/Panel2.connect(\"request_return\", func(): rotate_cube_to(0)) $Menus/Panel3.connect(\"request_return\", func(): rotate_cube_to(90)) $Menus/Panel4.connect(\"request_return\", func(): rotate_cube_to(180)) - var sm = start_menu.instantiate() - sm.connect(\"request_start\", start) - sm.connect(\"request_settings\", settings) - $Menus/Panel1.change_menu(sm, false) - -func start() -> void: - var svm = save_file_manager.instantiate() - svm.connect(\"request_start\", func(): request_start.emit()) - $Menus/Panel2.change_menu(svm) - rotate_cube_to(90) + var initial_menu := res_initial_menu.instantiate() + initial_menu.connect(\"request_start\", start) + initial_menu.connect(\"request_settings\", settings) + $Menus/Panel1.change_menu(initial_menu, false) +# Display on Panel 2 +const res_settings_menu = preload(\"res://menus/main/settings_menu.tscn\") func settings() -> void: - var sm = settings_menu.instantiate() - $Menus/Panel2.change_menu(sm) + var settings_menu := res_settings_menu.instantiate() + $Menus/Panel2.change_menu(settings_menu) rotate_cube_to(90) +const res_save_file_manager = preload(\"res://menus/main/save_file_manager.tscn\") +func start() -> void: + var save_file_manager := res_save_file_manager.instantiate() + save_file_manager.connect(\"request_start\", level_selection) + $Menus/Panel2.change_menu(save_file_manager) + rotate_cube_to(90) + +# Display on Panel 3 +const res_level_selection_menu = preload(\"res://menus/main/level_selection_menu.tscn\") +func level_selection() -> void: + var level_selection_menu := res_level_selection_menu.instantiate() + level_selection_menu.connect(\"request_play_level\", func(level: PackedScene): request_play_level.emit(level)) + $Menus/Panel3.change_menu(level_selection_menu) + rotate_cube_to(180) + +# cube func rotate_cube_to(degrees: int) -> void: if $Menus/AnimationPlayer.is_playing(): return @@ -98,23 +108,23 @@ ambient_light_source = 3 ambient_light_color = Color(0.986752, 0.986752, 0.986752, 1) reflected_light_source = 2 -[node name="Area" type="Node3D"] +[node name="MainMenu" type="Node3D"] process_mode = 3 script = SubResource("GDScript_bt14i") [node name="Menus" type="CSGBox3D" parent="."] use_collision = true -[node name="Panel1" parent="Menus" instance=ExtResource("1_qfa5o")] +[node name="Panel1" parent="Menus" instance=ExtResource("1_5vmsf")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.501) -[node name="Panel2" parent="Menus" instance=ExtResource("1_qfa5o")] +[node name="Panel2" parent="Menus" instance=ExtResource("1_5vmsf")] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.501, 0, 0) -[node name="Panel3" parent="Menus" instance=ExtResource("1_qfa5o")] +[node name="Panel3" parent="Menus" instance=ExtResource("1_5vmsf")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, -0.501) -[node name="Panel4" parent="Menus" instance=ExtResource("1_qfa5o")] +[node name="Panel4" parent="Menus" instance=ExtResource("1_5vmsf")] transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -0.501, 0, 0) [node name="AnimationPlayer" type="AnimationPlayer" parent="Menus"] @@ -133,7 +143,7 @@ environment = SubResource("Environment_qfa5o") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(0.819152, -0.412596, 0.39844, 0, 0.694658, 0.71934, -0.573576, -0.589249, 0.569031, 0, 0, 0) -[node name="Player" parent="." instance=ExtResource("2_0jxef")] +[node name="Player" parent="." instance=ExtResource("2_2rexg")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.87335, 0) [node name="Camera" parent="Player" index="0"] diff --git a/menus/menu.tscn b/menus/menu.tscn index 62e1204..7551ab7 100644 --- a/menus/menu.tscn +++ b/menus/menu.tscn @@ -114,10 +114,12 @@ libraries = { } [node name="Label" type="Label" parent="VSplitContainer"] +custom_minimum_size = Vector2(1, 1) layout_mode = 2 text = "MENU NAME" label_settings = SubResource("LabelSettings_2d4ws") horizontal_alignment = 1 +autowrap_mode = 3 uppercase = true [node name="MarginContainer" type="MarginContainer" parent="VSplitContainer"]