level_manager.gd
extends Node ## A list of all level scene file names const LEVELS := [ 'Level_0.scn', 'Level_1.scn', ] ## the base path to all ldtk generated level scenes const LEVEL_PATH := 'res://ldtk/levels' ## Currently loaded level Node reference var _current_level: Node2D ## References the current level's index in the LEVELS array. ## Starts at -1 so we can use `load_next_level()` at the start of the game. var _current_level_index: int = -1 ## The root node that contains all levels var _level_root: Node2D: get: var level_roots = get_tree().get_nodes_in_group('level_root') assert(level_roots.size() == 1, 'Level root count not met: %d' % level_roots.size()) return level_roots[0] func load_next_level(): _current_level_index = _current_level_index + 1 if _current_level_index >= LEVELS.size(): _current_level_index = 0 var next_level = LEVELS[_current_level_index] _load_level(next_level) func _load_level(level_name: String): _unload_level() var next_level_name = '{LEVEL_PATH}/{level_name}'.format({ 'LEVEL_PATH': LEVEL_PATH, 'level_name': level_name }) var next_level: PackedScene = load(next_level_name) _current_level = next_level.instantiate() _level_root.add_child(_current_level) func _unload_level(): if is_instance_valid(_current_level): _current_level.queue_free()