Maintenant une porte spécifie le spawn point de l'autre côté à destination. Ca permet à un niveau d'avoir plusieurs points de sorties et d'arrivée. Quand la princesse meurt, elle respawn au point d'arrivée dans la carte la dernière fois. Pour l'instant c'est un peu pénible d'aller écire les bonnes coordonnées dans chaque portes, je vais peut être finir par faire un truc automatique.
45 lines
1.4 KiB
GDScript
45 lines
1.4 KiB
GDScript
class_name Game extends Node
|
|
|
|
|
|
var current_scene : Node
|
|
var level0 = preload("res://levels/level_0.tscn")
|
|
var level1 = preload("res://levels/level_1.tscn")
|
|
|
|
var scene_name = "level_0"
|
|
var current_scence
|
|
var prev_scene
|
|
var last_spawn_point = null
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
go_to(scene_name, null)
|
|
|
|
func reload_current_scene() -> void:
|
|
go_to(scene_name, last_spawn_point)
|
|
|
|
func enter_door(destination : String, other_side_position : Vector2):
|
|
call_deferred("go_to", destination, other_side_position)
|
|
|
|
func go_to(destination : String, spawn_point):
|
|
if current_scence:
|
|
remove_child(current_scence)
|
|
|
|
if destination == "level_1":
|
|
current_scence = level1.instantiate()
|
|
scene_name = "level_1"
|
|
elif destination == "level_0":
|
|
current_scence = level0.instantiate()
|
|
scene_name = "level_0"
|
|
|
|
current_scence.connect("reload_me", reload_current_scene, ConnectFlags.CONNECT_ONE_SHOT)
|
|
var doors :Node = current_scence.find_child("Doors")
|
|
if doors:
|
|
for door in doors.get_children():
|
|
door.connect("door_openned", enter_door, ConnectFlags.CONNECT_ONE_SHOT)
|
|
add_child(current_scence)
|
|
|
|
if spawn_point:
|
|
var princesse :Princess = current_scence.find_child("Princesse")
|
|
princesse.position = spawn_point
|
|
last_spawn_point = spawn_point
|