70 lines
1.8 KiB
GDScript
70 lines
1.8 KiB
GDScript
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()
|