From 6309bce63f2dcdb83452737b6aa0d45e3ecf3653 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Mon, 3 Mar 2025 04:54:30 -0500 Subject: [PATCH 1/2] skeleton of level system --- assets/shaders/clean4x.gdshader.uid | 1 - assets/shaders/clean_edge.gdshader.uid | 1 - autoloads/levels.gd | 4 ++ autoloads/levels.tscn | 6 ++ maps/level_z.tscn | 7 ++- objects/player/player.gd.uid | 1 - project.godot | 1 + scripts/level/level.gd | 7 +++ scripts/level/level_info.gd | 20 +++++++ scripts/level/level_set.gd | 59 +++++++++++++++++++ .../spritesheet_animation.gd.uid | 1 - 11 files changed, 103 insertions(+), 5 deletions(-) delete mode 100644 assets/shaders/clean4x.gdshader.uid delete mode 100644 assets/shaders/clean_edge.gdshader.uid create mode 100644 autoloads/levels.gd create mode 100644 autoloads/levels.tscn delete mode 100644 objects/player/player.gd.uid create mode 100644 scripts/level/level.gd create mode 100644 scripts/level/level_info.gd create mode 100644 scripts/level/level_set.gd delete mode 100644 scripts/spritesheet_animation/spritesheet_animation.gd.uid diff --git a/assets/shaders/clean4x.gdshader.uid b/assets/shaders/clean4x.gdshader.uid deleted file mode 100644 index 38837cf..0000000 --- a/assets/shaders/clean4x.gdshader.uid +++ /dev/null @@ -1 +0,0 @@ -uid://0jlvid7baag0 diff --git a/assets/shaders/clean_edge.gdshader.uid b/assets/shaders/clean_edge.gdshader.uid deleted file mode 100644 index 0eff46f..0000000 --- a/assets/shaders/clean_edge.gdshader.uid +++ /dev/null @@ -1 +0,0 @@ -uid://c3wn7vy5wqvyv diff --git a/autoloads/levels.gd b/autoloads/levels.gd new file mode 100644 index 0000000..dc97f4e --- /dev/null +++ b/autoloads/levels.gd @@ -0,0 +1,4 @@ +extends Node + + +@export var level_sets: Array[LevelSet] = [] diff --git a/autoloads/levels.tscn b/autoloads/levels.tscn new file mode 100644 index 0000000..8335d58 --- /dev/null +++ b/autoloads/levels.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://dbqsgks307bto"] + +[ext_resource type="Script" path="res://autoloads/levels.gd" id="1_b8434"] + +[node name="Levels" type="Node"] +script = ExtResource("1_b8434") diff --git a/maps/level_z.tscn b/maps/level_z.tscn index 2848dd4..f5d4cca 100644 --- a/maps/level_z.tscn +++ b/maps/level_z.tscn @@ -1,11 +1,16 @@ -[gd_scene load_steps=5 format=4 uid="uid://cccb8wltupasj"] +[gd_scene load_steps=6 format=4 uid="uid://cccb8wltupasj"] [ext_resource type="Texture2D" uid="uid://b6a7l24y30iht" path="res://assets/textures/backgrounds/chocomint.png" id="1_h5jcm"] +[ext_resource type="Script" path="res://scripts/level/level.gd" id="1_hcs1r"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="2_dj7w1"] [ext_resource type="PackedScene" uid="uid://mh2gfm7iqqsm" path="res://objects/player/player.tscn" id="3_kyrxg"] [ext_resource type="PackedScene" uid="uid://c8r040r4glui4" path="res://objects/enemies/lashy/lashy.tscn" id="4_gykx6"] [node name="LevelZ" type="Node2D"] +script = ExtResource("1_hcs1r") +title = "Test Level Z" +id = "z-level" +order = 2 [node name="Background" type="Sprite2D" parent="."] modulate = Color(0.996924, 0.421436, 0, 1) diff --git a/objects/player/player.gd.uid b/objects/player/player.gd.uid deleted file mode 100644 index 17b64b1..0000000 --- a/objects/player/player.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b855r6rw5a08e diff --git a/project.godot b/project.godot index 0908775..0dde460 100644 --- a/project.godot +++ b/project.godot @@ -18,6 +18,7 @@ config/icon="res://icon.svg" [autoload] SceneManager="*res://autoloads/scene_manager.tscn" +Levels="*res://autoloads/levels.tscn" [display] diff --git a/scripts/level/level.gd b/scripts/level/level.gd new file mode 100644 index 0000000..e4f6bf7 --- /dev/null +++ b/scripts/level/level.gd @@ -0,0 +1,7 @@ +class_name Level +extends Node2D + + +@export var title: String +@export var id: String +@export_range(0,1,1,"or_greater") var order: int diff --git a/scripts/level/level_info.gd b/scripts/level/level_info.gd new file mode 100644 index 0000000..3ffe0f2 --- /dev/null +++ b/scripts/level/level_info.gd @@ -0,0 +1,20 @@ +@tool +class_name LevelInfo +extends Resource + + +@export var title: String: + set(value): + title = value + resource_name = title +@export var id: String +@export var order: int = 0 +@export_file("*.tscn", "*.scn") var scene_path: String + + +static func from_level(level: Level) -> LevelInfo: + var info = LevelInfo.new() + info.title = level.title + info.id = level.id + info.order = level.order + return info diff --git a/scripts/level/level_set.gd b/scripts/level/level_set.gd new file mode 100644 index 0000000..25d9432 --- /dev/null +++ b/scripts/level/level_set.gd @@ -0,0 +1,59 @@ +@tool +class_name LevelSet +extends Resource + + +@export var title: String: + set(value): + title = value + resource_name = title +@export var id: String +@export_dir var levels_dir: String: + set(value): + levels_dir = value + if Engine.is_editor_hint(): + update_levels() + +@export var levels: Array[LevelInfo] = [] + + +func has_id(id: String) -> bool: + for info in levels: + if info.id == id: + return true + return false + + +func has_level(level: Level) -> bool: + for info in levels: + if info.scene_path == level.scene_file_path: + return true + return false + + +func update_levels() -> void: + levels.clear() + var dir = DirAccess.open(levels_dir) + if dir: + dir.list_dir_begin() + var file = dir.get_next() + while file != "": + if not dir.current_is_dir() and file.ends_with(".tscn") or file.ends_with(".scn"): + var scene := load(levels_dir + "/" + file) as PackedScene + if scene and scene.can_instantiate(): + var level = scene.instantiate() + if level is Level: + if has_id(level.id): + _popup_alert("Duplicate level ID: %s" % level.id) + else: + levels.append(LevelInfo.from_level(level)) + level.free() + file = dir.get_next() + # sort levels by level order + levels.sort_custom(func(a, b): return a.order < b.order) + + +func _popup_alert(message: String) -> void: + var popup = AcceptDialog.new() + popup.dialog_text = message + EditorInterface.popup_dialog_centered(popup) diff --git a/scripts/spritesheet_animation/spritesheet_animation.gd.uid b/scripts/spritesheet_animation/spritesheet_animation.gd.uid deleted file mode 100644 index be2bc79..0000000 --- a/scripts/spritesheet_animation/spritesheet_animation.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cv55s54clajw5 From 6863a8a387e836c98e8992a3222751e835abd07a Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Mon, 3 Mar 2025 05:05:57 -0500 Subject: [PATCH 2/2] move noise shader into shaders folder --- {noise => assets/shaders}/noise.gdshader | 0 maps/level1.tscn | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename {noise => assets/shaders}/noise.gdshader (100%) diff --git a/noise/noise.gdshader b/assets/shaders/noise.gdshader similarity index 100% rename from noise/noise.gdshader rename to assets/shaders/noise.gdshader diff --git a/maps/level1.tscn b/maps/level1.tscn index b4227bc..b219a82 100644 --- a/maps/level1.tscn +++ b/maps/level1.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=11 format=3 uid="uid://bbnq7ptk8hhxa"] [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_bxdo5"] -[ext_resource type="Shader" path="res://noise/noise.gdshader" id="1_j2mm6"] +[ext_resource type="Shader" path="res://assets/shaders/noise.gdshader" id="1_j2mm6"] [ext_resource type="PackedScene" uid="uid://mh2gfm7iqqsm" path="res://objects/player/player.tscn" id="2_kip56"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="3_4td23"] [ext_resource type="PackedScene" uid="uid://68lav5rke5ag" path="res://objects/spring/spring.tscn" id="4_a3xei"]