Created
January 1, 2020 16:00
-
-
Save Janglee123/7d097237a0c64925a01b8bb84040830a 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