56 lines
1.5 KiB
GDScript
56 lines
1.5 KiB
GDScript
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)
|