ygdra/main.gd

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()