I'm currently working on a 2d platformer game with 10+ levels. What I'm thinking right now is how to select one of the 10+ levels. I want the player can select the level they want to clear.
Currently, I have written these codes:
Base Level
extends Node2D
export var level_index: int
export (String, MULTILINE) var level_title
func _ready() -> void:
var player: Player = get_node_or_null("Players/Player")
if is_instance_valid(player):
player.connect("died", self, "level_reset")
var flag: Flag = get_node_or_null("Objects/Flags/Flag")
if is_instance_valid(flag):
flag.connect("player_entered", self, "level_clear")
#func _process(delta: float) -> void:
# GameData.time += delta
func level_reset() -> void:
pass
func level_clear() -> void:
SceneManager.change_level(level_index + 1)
Scene Manager (Autoload)
extends Node
export var main_menu: PackedScene
export var settings: PackedScene
export (Array, PackedScene) var levels
func change_to_main_menu() -> void:
get_tree().change_scene_to(main_menu)
func change_to_settings() -> void:
get_tree().change_scene_to(settings)
func change_level(level_index: int) -> void:
var selected_level: PackedScene = levels[level_index]
get_tree().change_scene_to(selected_level)
Even though this code works, there's a problem. It checks the index of the array, not the index of the levels.
So I have to write level 01 as level_index 00, level 02 as level_index 01, and so on.

If possible, I want the level the same as the level index, so Level 01 is level index 1, level 02 is level index 2, and so on.
Do you have a better way to select a level?