-
-
Save realkotob/0e2e82c9a026f6daebf1d6c2cefbebdb to your computer and use it in GitHub Desktop.
Godot Level Loader
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extends Node | |
onready var scene_tree: = get_tree() | |
var _path: = "res://src/Levels/Levels/" | |
var _levels: = [] | |
var _level_index: = -1 | |
var _level | |
var _container | |
func _ready() -> void: | |
_levels = get_scenes_in_directory(_path) | |
Events.connect("level_finished", self, "_on_level_finished") | |
func setup(container: Node2D, level: = 0) -> void: | |
_container = container | |
load_level(level) | |
func _on_level_finished() -> void: | |
var next_level = clamp(_level_index + 1, 0, _levels.size() - 1) | |
load_level(next_level) | |
func get_scenes_in_directory(path) -> Array: | |
var files: = [] | |
var dir: = Directory.new() | |
dir.open(path) | |
dir.list_dir_begin(true, true) | |
while true: | |
var file = dir.get_next() | |
if file == "": | |
break | |
elif file.ends_with(".tscn"): | |
file = path + file | |
files.append(file) | |
dir.list_dir_end() | |
return files | |
func load_level(new_level_index: int) -> void: | |
if _level: | |
scene_tree.paused = true | |
_level.queue_free() | |
yield(_level, "tree_exited") | |
_level_index = new_level_index | |
var new_level = load(_levels[_level_index]) | |
_level = new_level.instance() | |
_container.call_deferred('add_child',_level) | |
scene_tree.paused = false | |
Events.emit_signal("level_loaded", _level_index) | |
func reset_level() -> void: | |
load_level(_level_index) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment