more work on level system

This commit is contained in:
Haze Weathers 2025-03-08 19:28:53 -05:00
parent b19ee682d1
commit dd54e286d8
13 changed files with 219 additions and 71 deletions

View file

@ -2,3 +2,61 @@ extends Node
@export var level_sets: Array[LevelSet] = [] @export var level_sets: Array[LevelSet] = []
var current_set_index: int = 0
var current_level_index: int = 0
var current_set: LevelSet:
get():
return level_sets[current_set_index]
var current_level: LevelInfo:
get():
return current_set.levels[current_level_index]
func _ready() -> void:
SceneManager.current_scene_changed.connect(_on_current_scene_changed)
func get_level(set_idx: int, level_idx: int) -> LevelInfo:
if set_idx >= level_sets.size():
return null
var lvl_set = level_sets[set_idx]
if level_idx >= lvl_set.levels.size():
return null
return lvl_set.levels[level_idx]
func advance_level() -> void:
var next_idx = current_level_index + 1
# change scene to end-of-set scene if it is reached
if next_idx >= current_set.levels.size():
SceneManager.current_scene = current_set.end_scene.instantiate()
return
var level_info = current_set.levels[next_idx]
var level = load(level_info.scene_path) as PackedScene
if level:
SceneManager.current_scene = level.instantiate()
func _detect_current_level() -> void:
if not SceneManager.current_scene is Level:
current_set_index = -1
current_level_index = -1
return
for idx_set in level_sets.size():
var level_set = level_sets[idx_set]
for idx_lvl in level_set.levels.size():
var level = level_set.levels[idx_lvl]
if level.scene_path == SceneManager.current_scene.scene_file_path:
current_set_index = idx_set
current_level_index = idx_lvl
return
func _on_current_scene_changed(_new_scene: Node) -> void:
_detect_current_level()

View file

@ -1,6 +1,9 @@
[gd_scene load_steps=2 format=3 uid="uid://dbqsgks307bto"] [gd_scene load_steps=4 format=3 uid="uid://dbqsgks307bto"]
[ext_resource type="Script" uid="uid://4na03iques5r" path="res://autoloads/levels.gd" id="1_b8434"] [ext_resource type="Script" uid="uid://4na03iques5r" path="res://autoloads/levels.gd" id="1_b8434"]
[ext_resource type="Script" uid="uid://dak8il8fxqyph" path="res://scripts/level/level_set.gd" id="2_ebfuu"]
[ext_resource type="Resource" uid="uid://g36wkssommtr" path="res://maps/descent.tres" id="3_hgsu8"]
[node name="Levels" type="Node"] [node name="Levels" type="Node"]
script = ExtResource("1_b8434") script = ExtResource("1_b8434")
level_sets = Array[ExtResource("2_ebfuu")]([ExtResource("3_hgsu8")])

View file

@ -1,6 +1,10 @@
extends Node extends Node
## Emitted when the current scene is changed.
signal current_scene_changed(new_scene: Node)
## Methods of scaling the game viewport. ## Methods of scaling the game viewport.
enum ScaleMode { enum ScaleMode {
## Maintain aspect ratio and scale by highest whole number that will fit within the screen. ## Maintain aspect ratio and scale by highest whole number that will fit within the screen.
@ -46,6 +50,7 @@ var current_scene: Node:
new_scene.get_parent().remove_child.call_deferred(new_scene) new_scene.get_parent().remove_child.call_deferred(new_scene)
viewport.add_child.call_deferred(new_scene) viewport.add_child.call_deferred(new_scene)
current_scene = new_scene current_scene = new_scene
current_scene_changed.emit(new_scene)
func _ready() -> void: func _ready() -> void:

View file

@ -4,6 +4,57 @@
[ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="2_3lnes"] [ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="2_3lnes"]
[ext_resource type="AudioStream" uid="uid://dp7tqt5uocg0g" path="res://assets/audio/sfx/talking.ogg" id="3_3lnes"] [ext_resource type="AudioStream" uid="uid://dp7tqt5uocg0g" path="res://assets/audio/sfx/talking.ogg" id="3_3lnes"]
[sub_resource type="Animation" id="Animation_edpvw"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Label:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(7, 6)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Label2:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(169, 186)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("ColorRect:color")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0, 0, 0, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("AudioStreamPlayer:playing")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_5wwpe"] [sub_resource type="Animation" id="Animation_5wwpe"]
resource_name = "fade" resource_name = "fade"
length = 6.0 length = 6.0
@ -71,57 +122,6 @@ tracks/4/keys = {
"values": [true] "values": [true]
} }
[sub_resource type="Animation" id="Animation_edpvw"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Label:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(7, 6)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Label2:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(169, 186)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("ColorRect:color")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0, 0, 0, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("AudioStreamPlayer:playing")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_iw1oc"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_iw1oc"]
_data = { _data = {
&"RESET": SubResource("Animation_edpvw"), &"RESET": SubResource("Animation_edpvw"),
@ -141,9 +141,9 @@ position = Vector2(144, 108)
texture = ExtResource("1_edpvw") texture = ExtResource("1_edpvw")
[node name="Label" type="Label" parent="."] [node name="Label" type="Label" parent="."]
offset_left = -126.41 offset_left = 7.0
offset_top = 6.0 offset_top = 6.0
offset_right = -14.41 offset_right = 119.0
offset_bottom = 29.0 offset_bottom = 29.0
theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) theme_override_colors/font_shadow_color = Color(0, 0, 0, 1)
theme_override_constants/shadow_outline_size = 8 theme_override_constants/shadow_outline_size = 8
@ -152,9 +152,9 @@ theme_override_font_sizes/font_size = 16
text = "WORLD 1" text = "WORLD 1"
[node name="Label2" type="Label" parent="."] [node name="Label2" type="Label" parent="."]
offset_left = 295.0 offset_left = 169.0
offset_top = 186.0 offset_top = 186.0
offset_right = 407.0 offset_right = 281.0
offset_bottom = 209.0 offset_bottom = 209.0
theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) theme_override_colors/font_shadow_color = Color(0, 0, 0, 1)
theme_override_constants/shadow_outline_size = 8 theme_override_constants/shadow_outline_size = 8

57
maps/descent.tres Normal file
View file

@ -0,0 +1,57 @@
[gd_resource type="Resource" script_class="LevelSet" load_steps=10 format=3 uid="uid://g36wkssommtr"]
[ext_resource type="Script" uid="uid://d3hlv706rwapg" path="res://scripts/level/level_info.gd" id="1_47duy"]
[ext_resource type="PackedScene" uid="uid://bbnq7ptk8hhxa" path="res://maps/level1.tscn" id="1_d6k11"]
[ext_resource type="Script" uid="uid://dak8il8fxqyph" path="res://scripts/level/level_set.gd" id="2_f3ju2"]
[ext_resource type="PackedScene" uid="uid://bt3mxr1j3qyul" path="res://cutscenes/world1_cut.tscn" id="4_i5ovp"]
[sub_resource type="Resource" id="Resource_d6k11"]
resource_name = "Obligatory Tutorial Level"
script = ExtResource("1_47duy")
title = "Obligatory Tutorial Level"
id = "tutorial"
order = 0
scene_path = "res://maps/descent/tutorial.tscn"
[sub_resource type="Resource" id="Resource_i5ovp"]
resource_name = "Yikes! Spikes!"
script = ExtResource("1_47duy")
title = "Yikes! Spikes!"
id = "spikes"
order = 1
scene_path = "res://maps/descent/yikes_spikes.tscn"
[sub_resource type="Resource" id="Resource_p1poa"]
resource_name = "Yikes! More Spikes!"
script = ExtResource("1_47duy")
title = "Yikes! More Spikes!"
id = "more-spikes"
order = 2
scene_path = "res://maps/descent/yikes_more_spikes.tscn"
[sub_resource type="Resource" id="Resource_sgm6x"]
resource_name = "Spring Time!"
script = ExtResource("1_47duy")
title = "Spring Time!"
id = "spring-time"
order = 3
scene_path = "res://maps/descent/its_spring.tscn"
[sub_resource type="Resource" id="Resource_ba8kn"]
resource_name = "Purple Portals"
script = ExtResource("1_47duy")
title = "Purple Portals"
id = "purple-portals"
order = 4
scene_path = "res://maps/descent/purple_portals.tscn"
[resource]
resource_name = "Descent"
script = ExtResource("2_f3ju2")
title = "Descent"
id = "descent"
start_scene = ExtResource("4_i5ovp")
end_scene = ExtResource("1_d6k11")
levels_dir = "res://maps/descent"
levels = Array[ExtResource("1_47duy")]([SubResource("Resource_d6k11"), SubResource("Resource_i5ovp"), SubResource("Resource_p1poa"), SubResource("Resource_sgm6x"), SubResource("Resource_ba8kn")])
metadata/_custom_type_script = "uid://dak8il8fxqyph"

View file

@ -1,12 +1,13 @@
[gd_scene load_steps=12 format=3 uid="uid://bd2srrfspy7ft"] [gd_scene load_steps=13 format=3 uid="uid://bd2srrfspy7ft"]
[ext_resource type="Script" uid="uid://d3v13a4er2h1x" path="res://scripts/level/level.gd" id="1_dnp5v"]
[ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_p8vut"] [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_p8vut"]
[ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_hpwyk"] [ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_hpwyk"]
[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_edpy5"] [ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_edpy5"]
[ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_onc0l"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_onc0l"]
[ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_s8gph"] [ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_s8gph"]
[ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_8fhro"] [ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_8fhro"]
[ext_resource type="PackedScene" uid="uid://dmg4t4vm6fd5s" path="res://maps/purple_portals.tscn" id="7_ri7pq"] [ext_resource type="PackedScene" uid="uid://dmg4t4vm6fd5s" path="res://maps/descent/purple_portals.tscn" id="7_ri7pq"]
[ext_resource type="PackedScene" uid="uid://cnqmbq84hbnvj" path="res://objects/spikes/spikes.tscn" id="8_cfxl1"] [ext_resource type="PackedScene" uid="uid://cnqmbq84hbnvj" path="res://objects/spikes/spikes.tscn" id="8_cfxl1"]
[ext_resource type="PackedScene" uid="uid://68lav5rke5ag" path="res://objects/spring/spring.tscn" id="9_dtd3x"] [ext_resource type="PackedScene" uid="uid://68lav5rke5ag" path="res://objects/spring/spring.tscn" id="9_dtd3x"]
@ -18,7 +19,11 @@ shader_parameter/animate_noise = true
shader_parameter/noise_intensity = 1.0 shader_parameter/noise_intensity = 1.0
shader_parameter/fps = 15.0 shader_parameter/fps = 15.0
[node name="Level3" type="Node2D"] [node name="SpringTime" type="Node2D"]
script = ExtResource("1_dnp5v")
title = "Spring Time!"
id = "spring-time"
order = 3
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
material = SubResource("ShaderMaterial_sf5kh") material = SubResource("ShaderMaterial_sf5kh")

View file

@ -22,7 +22,7 @@ shader_parameter/fps = 15.0
script = ExtResource("1_srnft") script = ExtResource("1_srnft")
title = "Purple Portals" title = "Purple Portals"
id = "purple-portals" id = "purple-portals"
order = 3 order = 4
metadata/_custom_type_script = "uid://d3v13a4er2h1x" metadata/_custom_type_script = "uid://d3v13a4er2h1x"
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]

View file

@ -1,12 +1,13 @@
[gd_scene load_steps=10 format=3 uid="uid://byx8blpt2i8hx"] [gd_scene load_steps=11 format=3 uid="uid://byx8blpt2i8hx"]
[ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_5dne7"] [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_5dne7"]
[ext_resource type="Script" uid="uid://d3v13a4er2h1x" path="res://scripts/level/level.gd" id="1_8bygc"]
[ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_els7d"] [ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_els7d"]
[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_imjpd"] [ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_imjpd"]
[ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_1rmvv"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_1rmvv"]
[ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_ae2vf"] [ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_ae2vf"]
[ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_yywag"] [ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_yywag"]
[ext_resource type="PackedScene" uid="uid://cun6ov7vdfr6a" path="res://maps/yikes_spikes.tscn" id="7_0g05i"] [ext_resource type="PackedScene" uid="uid://cun6ov7vdfr6a" path="res://maps/descent/yikes_spikes.tscn" id="7_0g05i"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_sf5kh"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_sf5kh"]
@ -16,7 +17,10 @@ shader_parameter/animate_noise = true
shader_parameter/noise_intensity = 1.0 shader_parameter/noise_intensity = 1.0
shader_parameter/fps = 15.0 shader_parameter/fps = 15.0
[node name="Level2" type="Node2D"] [node name="Tutorial" type="Node2D"]
script = ExtResource("1_8bygc")
title = "Obligatory Tutorial Level"
id = "tutorial"
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
material = SubResource("ShaderMaterial_sf5kh") material = SubResource("ShaderMaterial_sf5kh")

View file

@ -1,12 +1,13 @@
[gd_scene load_steps=11 format=3 uid="uid://hrrypch7psfa"] [gd_scene load_steps=12 format=3 uid="uid://hrrypch7psfa"]
[ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_6i0lb"] [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_6i0lb"]
[ext_resource type="Script" uid="uid://d3v13a4er2h1x" path="res://scripts/level/level.gd" id="1_73lj3"]
[ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_3dp43"] [ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_3dp43"]
[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_mts2t"] [ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_mts2t"]
[ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_evy0b"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_evy0b"]
[ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_eo1kb"] [ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_eo1kb"]
[ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_vvcgd"] [ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_vvcgd"]
[ext_resource type="PackedScene" uid="uid://bd2srrfspy7ft" path="res://maps/its_spring.tscn" id="7_4f1b6"] [ext_resource type="PackedScene" uid="uid://bd2srrfspy7ft" path="res://maps/descent/its_spring.tscn" id="7_4f1b6"]
[ext_resource type="PackedScene" uid="uid://cnqmbq84hbnvj" path="res://objects/spikes/spikes.tscn" id="8_8qxg7"] [ext_resource type="PackedScene" uid="uid://cnqmbq84hbnvj" path="res://objects/spikes/spikes.tscn" id="8_8qxg7"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_sf5kh"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_sf5kh"]
@ -17,7 +18,11 @@ shader_parameter/animate_noise = true
shader_parameter/noise_intensity = 1.0 shader_parameter/noise_intensity = 1.0
shader_parameter/fps = 15.0 shader_parameter/fps = 15.0
[node name="Level3" type="Node2D"] [node name="YikesMoreSpikes" type="Node2D"]
script = ExtResource("1_73lj3")
title = "Yikes! More Spikes!"
id = "more-spikes"
order = 2
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
material = SubResource("ShaderMaterial_sf5kh") material = SubResource("ShaderMaterial_sf5kh")

View file

@ -1,12 +1,13 @@
[gd_scene load_steps=11 format=3 uid="uid://cun6ov7vdfr6a"] [gd_scene load_steps=12 format=3 uid="uid://cun6ov7vdfr6a"]
[ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_588ks"] [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_588ks"]
[ext_resource type="Script" uid="uid://d3v13a4er2h1x" path="res://scripts/level/level.gd" id="1_3317b"]
[ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_rvhjv"] [ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_rvhjv"]
[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_pdn7u"] [ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_pdn7u"]
[ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_pcxb3"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_pcxb3"]
[ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_bpruh"] [ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_bpruh"]
[ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_uyuca"] [ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_uyuca"]
[ext_resource type="PackedScene" uid="uid://hrrypch7psfa" path="res://maps/yikes_more_spikes.tscn" id="7_7rv68"] [ext_resource type="PackedScene" uid="uid://hrrypch7psfa" path="res://maps/descent/yikes_more_spikes.tscn" id="7_7rv68"]
[ext_resource type="PackedScene" uid="uid://cnqmbq84hbnvj" path="res://objects/spikes/spikes.tscn" id="7_y3eq7"] [ext_resource type="PackedScene" uid="uid://cnqmbq84hbnvj" path="res://objects/spikes/spikes.tscn" id="7_y3eq7"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_sf5kh"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_sf5kh"]
@ -17,7 +18,11 @@ shader_parameter/animate_noise = true
shader_parameter/noise_intensity = 1.0 shader_parameter/noise_intensity = 1.0
shader_parameter/fps = 15.0 shader_parameter/fps = 15.0
[node name="Level3" type="Node2D"] [node name="YikesSpikes" type="Node2D"]
script = ExtResource("1_3317b")
title = "Yikes! Spikes!"
id = "spikes"
order = 1
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
material = SubResource("ShaderMaterial_sf5kh") material = SubResource("ShaderMaterial_sf5kh")

View file

@ -10,4 +10,4 @@ signal door_entered()
func _on_player_detector_body_entered(body: Node2D) -> void: func _on_player_detector_body_entered(body: Node2D) -> void:
if body is Player: if body is Player:
door_entered.emit() door_entered.emit()
SceneManager.current_scene = next_map.instantiate() Levels.advance_level()

View file

@ -17,4 +17,5 @@ static func from_level(level: Level) -> LevelInfo:
info.title = level.title info.title = level.title
info.id = level.id info.id = level.id
info.order = level.order info.order = level.order
info.scene_path = level.scene_file_path
return info return info

View file

@ -8,12 +8,15 @@ extends Resource
title = value title = value
resource_name = title resource_name = title
@export var id: String @export var id: String
@export var start_scene: PackedScene
@export var end_scene: PackedScene
@export_dir var levels_dir: String: @export_dir var levels_dir: String:
set(value): set(value):
levels_dir = value levels_dir = value
if Engine.is_editor_hint(): if Engine.is_editor_hint():
update_levels() update_levels()
@export_tool_button("Update Levels") var _update_levels_action = update_levels
@export var levels: Array[LevelInfo] = [] @export var levels: Array[LevelInfo] = []
@ -51,6 +54,8 @@ func update_levels() -> void:
file = dir.get_next() file = dir.get_next()
# sort levels by level order # sort levels by level order
levels.sort_custom(func(a, b): return a.order < b.order) levels.sort_custom(func(a, b): return a.order < b.order)
emit_changed()
notify_property_list_changed()
func _popup_alert(message: String) -> void: func _popup_alert(message: String) -> void: