extends Node const ExplorationScreen = preload("res://screen/exploration_screen.tscn") const StartScreen = preload("res://screen/start_screen.tscn") const MapScreen = preload("res://screen/map_screen.tscn") const EndScreen = preload("res://screen/end_screen.tscn") # Member variables. var map_width = 40 var map_height = 40 var generator = Generator.new() var level: Maze = null var player: MazePlayer = MazePlayer.new() var current_screen: AbstractScreen = null # Called when the node enters the scene tree for the first time. func _ready(): randomize() goToStartScreen() func new_level(): # Generate level level = generator.generate_map(map_width, map_height) # Teleport player at the entrance player.teleport_at(level.entrance) player.turn_at(randi() % 4) func on_next_screen(screen): match screen: 'start': goToStartScreen() 'exploration': goToExplorationScreen() 'map': goToMapScreen() 'end': goToEndScreen() func clean_up_screen(): if current_screen != null: current_screen.queue_free() func attach_screen(): current_screen.connect("next_screen", self, "on_next_screen") add_child(current_screen) func goToStartScreen(): clean_up_screen() current_screen = StartScreen.instance() new_level() attach_screen() func goToExplorationScreen(): clean_up_screen() current_screen = ExplorationScreen.instance() current_screen.init(level, player) attach_screen() func goToMapScreen(): clean_up_screen() current_screen = MapScreen.instance() current_screen.init(level, player) attach_screen() func goToEndScreen(): clean_up_screen() current_screen = EndScreen.instance() current_screen.init(level, player) attach_screen()