63 lines
1.8 KiB
GDScript
63 lines
1.8 KiB
GDScript
extends Control
|
|
|
|
enum GameState { MAIN_MENU, GAME, LOSS, WIN }
|
|
var current_game_state: GameState = GameState.MAIN_MENU
|
|
|
|
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_instance)
|
|
elif new_state == GameState.GAME:
|
|
var game_instance = game_scene.instantiate()
|
|
add_child(game_instance)
|
|
var manager = game_instance.get_node("%GameManager")
|
|
manager.lost.connect(_on_loss)
|
|
manager.won.connect(_on_win)
|
|
elif new_state == GameState.LOSS:
|
|
var score_screen_instance = score_screen_scene.instantiate()
|
|
add_child(score_screen_instance)
|
|
score_screen_instance.lose()
|
|
score_screen_instance.restart_game.connect(_on_restart)
|
|
elif new_state == GameState.WIN:
|
|
var score_screen_instance = score_screen_scene.instantiate()
|
|
add_child(score_screen_instance)
|
|
score_screen_instance.win()
|
|
score_screen_instance.restart_game.connect(_on_restart)
|
|
|
|
# Clean up old scene
|
|
match (current_game_state):
|
|
GameState.MAIN_MENU:
|
|
var main_menu_instance = $MainMenu
|
|
main_menu_instance.queue_free()
|
|
GameState.GAME:
|
|
var main_instance = $Main
|
|
main_instance.queue_free()
|
|
GameState.LOSS:
|
|
var score_screen_instance = $ScoreScreen
|
|
score_screen_instance.queue_free()
|
|
GameState.WIN:
|
|
var score_screen_instance = $ScoreScreen
|
|
score_screen_instance.queue_free()
|
|
|
|
current_game_state = new_state
|
|
|
|
func _on_main_menu_interacted():
|
|
transition(GameState.GAME)
|
|
|
|
func _on_loss():
|
|
transition(GameState.LOSS)
|
|
|
|
func _on_win():
|
|
transition(GameState.WIN)
|
|
|
|
func _on_restart():
|
|
transition(GameState.GAME)
|