extends Control enum GameState { MAIN_MENU, GAME, LOSS, WIN } var current_game_state: GameState = GameState.MAIN_MENU var manager var main_menu_scene = preload("res://main_menu.tscn") var game_scene = preload("res://main.tscn") var score_screen_scene = preload("res://score_screen.tscn") func _ready(): $MainMenu.main_menu_interacted.connect(_on_main_menu_interacted) func transition(new_state: GameState): # Clean up current scene if new_state == GameState.MAIN_MENU: var main_menu_instance = main_menu_scene.instantiate() add_child(main_menu_scene) elif new_state == GameState.GAME: var game_instance = game_scene.instantiate() add_child(game_instance) elif new_state == GameState.LOSS: var score_screen_instance = score_screen_scene.instantiate() add_child(score_screen_instance) score_screen_instance.win() elif new_state == GameState.WIN: pass # Clean up old scene match (current_game_state): GameState.MAIN_MENU: var main_menu_instance = $MainMenu var main_menu_instance.destroy() GameState.GAME: var main_instance = $Main main_instance.destroy() GameState.LOSS: var score_screen_instance = $ScoreScreen score_screen_instance.destroy() GameState.WIN: var score_screen_instance = $ScoreScreen score_screen_instance.destroy() current_game_state = new_state func _on_main_menu_interacted(): transition(GameState.GAME) add_child(manager) manager.failed.connect(_on_loss) func _on_loss(): transition(GameState.LOSS) func _on_win(): transition(GameState.WIN)