Clean Up

Published on December 10, 2025

Code Snippets

viewport_background.gd

extends Node


func _ready():
  RenderingServer.set_default_clear_color(Color('#000'))

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()

exit.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()