start of level system

This commit is contained in:
Haze Weathers 2025-02-28 03:37:26 -05:00
parent c18a7746f7
commit ab2d42ccd9
11 changed files with 342 additions and 4 deletions

View file

@ -1,2 +1,12 @@
class_name Level class_name Level
extends Node3D extends Node3D
@export var info: LevelInfo
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventKey:
if event.keycode == KEY_R and event.pressed:
var new_level = load(scene_file_path).instantiate()
SceneManager.change_scene(new_level)

6
levels/level_info.gd Normal file
View file

@ -0,0 +1,6 @@
class_name LevelInfo
extends Resource
@export var title: String
@export_range(1,5,1) var difficulty: int = 1

1
levels/level_info.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://hmtamckjm4vm

View file

@ -1,2 +1,47 @@
@tool
class_name LevelSet class_name LevelSet
extends Resource extends Resource
@export var title: String
@export_tool_button("Update Levels") var _update_action = update_level_info
@export_dir var levels_dir: String:
set(value):
levels_dir = value
if Engine.is_editor_hint():
update_level_info()
@export var levels: Array[LevelEntry] = []
func update_level_info():
levels.clear()
if levels_dir.is_empty() or not DirAccess.dir_exists_absolute(levels_dir):
notify_property_list_changed()
return
var dir = DirAccess.open(levels_dir)
var files = Array(dir.get_files()).filter(
func(path: String):
return path.ends_with(".tscn") or path.ends_with(".scn")
) as Array[String]
for file in files:
var packed_scene = load(levels_dir + "/" + file) as PackedScene
if packed_scene:
var level = packed_scene.instantiate()
if level is Level:
var entry = LevelEntry.new()
entry.resource_name = level.info.title
entry.info = level.info
entry.scene = packed_scene
levels.append(entry)
level.free()
notify_property_list_changed()
if Engine.is_editor_hint():
ResourceSaver.save(self, resource_path)
class LevelEntry extends Resource:
@export var info: LevelInfo
@export var scene: PackedScene

65
levels/w1.tres Normal file
View file

@ -0,0 +1,65 @@
[gd_resource type="Resource" script_class="LevelSet" load_steps=16 format=3 uid="uid://btw8hqdurtu4l"]
[ext_resource type="Script" uid="uid://hmtamckjm4vm" path="res://levels/level_info.gd" id="1_aabai"]
[ext_resource type="Script" uid="uid://pgfv21pnsipl" path="res://levels/level_set.gd" id="1_wemf7"]
[ext_resource type="PackedScene" uid="uid://bkas0lj53glkn" path="res://levels/w1/1_01.tscn" id="2_e78ac"]
[ext_resource type="PackedScene" uid="uid://w0nd4xra2jf1" path="res://levels/w1/1_02.tscn" id="3_t0snc"]
[ext_resource type="PackedScene" uid="uid://brskrrxg5v5wq" path="res://levels/w1/1_03.tscn" id="4_argu4"]
[ext_resource type="PackedScene" uid="uid://3ck33ekhtriv" path="res://levels/w1/1_04.scn" id="5_qkhto"]
[sub_resource type="GDScript" id="GDScript_ue4o7"]
[sub_resource type="Resource" id="Resource_qskty"]
script = ExtResource("1_aabai")
title = "Welcome To Poo Central!"
difficulty = 1
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="Resource" id="Resource_ymcbg"]
resource_name = "Welcome To Golf Central!"
script = SubResource("GDScript_ue4o7")
info = SubResource("Resource_qskty")
scene = ExtResource("2_e78ac")
[sub_resource type="Resource" id="Resource_4m1at"]
script = ExtResource("1_aabai")
title = "Oogly Goo"
difficulty = 2
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="Resource" id="Resource_604lb"]
resource_name = "Oogly Goo"
script = SubResource("GDScript_ue4o7")
info = SubResource("Resource_4m1at")
scene = ExtResource("3_t0snc")
[sub_resource type="Resource" id="Resource_108v6"]
script = ExtResource("1_aabai")
title = "Number Three!"
difficulty = 5
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="Resource" id="Resource_4ntyl"]
resource_name = "Number Three!"
script = SubResource("GDScript_ue4o7")
info = SubResource("Resource_108v6")
scene = ExtResource("4_argu4")
[sub_resource type="Resource" id="Resource_ra4qo"]
script = ExtResource("1_aabai")
title = "Foursyies"
difficulty = 3
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="Resource" id="Resource_0h8e4"]
resource_name = "Foursyies"
script = SubResource("GDScript_ue4o7")
info = SubResource("Resource_ra4qo")
scene = ExtResource("5_qkhto")
[resource]
script = ExtResource("1_wemf7")
title = "Golf Central"
levels_dir = "res://levels/w1"
levels = Array[SubResource("GDScript_ue4o7")]([SubResource("Resource_ymcbg"), SubResource("Resource_604lb"), SubResource("Resource_4ntyl"), SubResource("Resource_0h8e4")])
metadata/_custom_type_script = "uid://pgfv21pnsipl"

View file

@ -1,6 +1,7 @@
[gd_scene load_steps=14 format=3 uid="uid://bkas0lj53glkn"] [gd_scene load_steps=16 format=3 uid="uid://bkas0lj53glkn"]
[ext_resource type="Script" uid="uid://vydhlp6ju8bw" path="res://levels/level.gd" id="1_r1ilo"] [ext_resource type="Script" uid="uid://vydhlp6ju8bw" path="res://levels/level.gd" id="1_r1ilo"]
[ext_resource type="Script" uid="uid://hmtamckjm4vm" path="res://levels/level_info.gd" id="2_61qek"]
[ext_resource type="MeshLibrary" uid="uid://bqxgr3arh0i7f" path="res://assets/mesh_libraries/w1/w1_walls.meshlib" id="2_81akk"] [ext_resource type="MeshLibrary" uid="uid://bqxgr3arh0i7f" path="res://assets/mesh_libraries/w1/w1_walls.meshlib" id="2_81akk"]
[ext_resource type="PackedScene" uid="uid://cybm74xwbsivx" path="res://objects/canny_cat.tscn" id="4_emyyh"] [ext_resource type="PackedScene" uid="uid://cybm74xwbsivx" path="res://objects/canny_cat.tscn" id="4_emyyh"]
[ext_resource type="PackedScene" uid="uid://cdpgby3r6xe4n" path="res://objects/goal_post.tscn" id="5_oq0l4"] [ext_resource type="PackedScene" uid="uid://cdpgby3r6xe4n" path="res://objects/goal_post.tscn" id="5_oq0l4"]
@ -8,6 +9,12 @@
[ext_resource type="PackedScene" uid="uid://bfic5n608nc5j" path="res://objects/sand_pit.tscn" id="6_rlgmy"] [ext_resource type="PackedScene" uid="uid://bfic5n608nc5j" path="res://objects/sand_pit.tscn" id="6_rlgmy"]
[ext_resource type="Texture2D" uid="uid://cpmi7w2fwm2sf" path="res://assets/textures/world/checker_grass.png" id="7_3jvq7"] [ext_resource type="Texture2D" uid="uid://cpmi7w2fwm2sf" path="res://assets/textures/world/checker_grass.png" id="7_3jvq7"]
[sub_resource type="Resource" id="Resource_qskty"]
script = ExtResource("2_61qek")
title = "Welcome To Poo Central!"
difficulty = 1
metadata/_custom_type_script = "uid://hmtamckjm4vm"
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_oakh3"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_oakh3"]
sky_top_color = Color(0.270389, 0.858166, 0.929253, 1) sky_top_color = Color(0.270389, 0.858166, 0.929253, 1)
sky_horizon_color = Color(0.270588, 0.858824, 0.929412, 1) sky_horizon_color = Color(0.270588, 0.858824, 0.929412, 1)
@ -33,8 +40,8 @@ resource_local_to_scene = true
shading_mode = 0 shading_mode = 0
albedo_color = Color(0.916968, 0.113727, 0, 1) albedo_color = Color(0.916968, 0.113727, 0, 1)
[sub_resource type="PlaneMesh" id="PlaneMesh_roqf0"] [sub_resource type="BoxMesh" id="BoxMesh_25rxq"]
size = Vector2(32, 32) size = Vector3(32, 1, 32)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_tpmcl"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_tpmcl"]
render_priority = 0 render_priority = 0
@ -45,6 +52,7 @@ shader_parameter/uv_scale = Vector2(0.5, 0.5)
[node name="Level" type="Node3D"] [node name="Level" type="Node3D"]
script = ExtResource("1_r1ilo") script = ExtResource("1_r1ilo")
info = SubResource("Resource_qskty")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_n6dij") environment = SubResource("Environment_n6dij")
@ -86,7 +94,8 @@ transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, -12.54
polygon = PackedVector2Array(2.33224, -4.27959, 0.718879, 0.533604, 2.00957, 6.26103, -3.74475, 6.12658, -3.52964, -4.44092) polygon = PackedVector2Array(2.33224, -4.27959, 0.718879, 0.533604, 2.00957, 6.26103, -3.74475, 6.12658, -3.52964, -4.44092)
[node name="CSGMesh3D" type="CSGMesh3D" parent="."] [node name="CSGMesh3D" type="CSGMesh3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
use_collision = true use_collision = true
collision_mask = 0 collision_mask = 0
mesh = SubResource("PlaneMesh_roqf0") mesh = SubResource("BoxMesh_25rxq")
material = SubResource("ShaderMaterial_tpmcl") material = SubResource("ShaderMaterial_tpmcl")

101
levels/w1/1_02.tscn Normal file

File diff suppressed because one or more lines are too long

101
levels/w1/1_03.tscn Normal file

File diff suppressed because one or more lines are too long

BIN
levels/w1/1_04.scn Normal file

Binary file not shown.