Hello there. I am working on learning arrays and using them in a sort-of procedural generation type engine. I have an array of packedScenes (level objects for each stage) and I am using an RNG system to cycle through them, removing each one when it is called and when the array is empty, moving to the final scene. My levels are all independent and the level change system is called from a single global/singleton function. I have a variable storing the total size of the array so I don't hit any non-existent elements.
However, watching my debugger, my game crashes every time and it is always when the last elements of the array is called (when the levelKeyMax variable matches the num variable that selects the level) - why is this happening and how could i fix it?
Also, apologies on my Markdown not working. Don't know why it's acting up.
extends Node
var nextScene
var removeTag
var levelKeyMax
var levelKeys = [
"res://Level_1.tscn",
"res://Level_2.tscn",
"res://Level_3.tscn",
"res://Level_4.tscn",
"res://Level_5.tscn",
"res://Level_6.tscn",
"res://Level_7.tscn",
"res://Level_8.tscn",
"res://Level_9.tscn",
"res://Level_10.tscn",
"res://Level_11.tscn",
"res://Level_12.tscn",
"res://Level_13.tscn",
"res://Level_14.tscn",
"res://Level_15.tscn",
"res://Level_16.tscn",
"res://Level_17.tscn",
"res://Level_18.tscn",
"res://Level_19.tscn",
"res://Level_20.tscn"
]
func _ready():
levelKeyMax = levelKeys.size()
get_tree().change_scene("res://Level_0.tscn")
func levelSelect():
levelKeyMax = levelKeys.size()
if levelKeys.empty() == false:
var rng = RandomNumberGenerator.new()
rng.randomize()
var num = rng.randi_range(0,(levelKeyMax))
nextScene = (levelKeys[num])
print("Loading " + str(nextScene))
get_tree().change_scene(nextScene)
call_deferred(nextScene)
levelKeys.remove(num)
if levelKeys.empty() == true:
get_tree().change_scene("res://EndLevel.tscn")