1
0
Fork 0
1bit-godot-course/metroidvania/Scenes/World/World.gd

46 lines
1.3 KiB
GDScript

extends Node
var MainInstances = ResourceLoader.MainInstances
onready var currentLevel = $Level_00
func _ready():
VisualServer.set_default_clear_color(Color.black)
Music.list_play()
if SaverLoader.is_loading:
SaverLoader.load_game()
SaverLoader.is_loading = false
MainInstances.Player.connect("hit_door", self, "_on_Player_hit_door")
MainInstances.Player.connect("died", self, "_on_Player_died")
func _on_Player_hit_door(door):
# Executes the function after the current tick of the game is done, to make
# sure everything is ready to be switched since we're doing calculations
# based on the current level
call_deferred("change_levels", door)
func change_levels(door):
var offset = currentLevel.position
currentLevel.queue_free()
var NewLevel = load(door.new_level_path)
var newLevel = NewLevel.instance()
add_child(newLevel)
var newDoor = get_door_with_connection(door)
var exit_position = newDoor.position - offset
newLevel.position = door.position - exit_position
func get_door_with_connection(outgoingDoor):
var doors = get_tree().get_nodes_in_group("Door")
for door in doors:
if door.connection == outgoingDoor.connection and door != outgoingDoor:
return door
return null
func _on_Player_died():
yield(get_tree().create_timer(1.0), "timeout")
get_tree().change_scene("res://Scenes/Menus/GameOverMenu.tscn")