niveau: avoir des niveaux indépendants
Il est maintenant possible d'avoir des niveaux indépendants et de switcher de l'un à l'autre en utilisant une porte. La porte doit indiquer le nom du niveau suivant et ensuite dans game.gd un mapping statique permet de passer d'un niveau à l'autre. Les limitations actuelles et la todo liste: - La princesse spawn toujours au même endroit, elle devrait spawner par la porte qui l'a fait venir et bien sur dans la carte pas dans le vide à côté. - On perds l'état du niveau quand on meurt, il faut que ça change dans le futur, c'est pas préssé ceci dit. - Le niveau devrait s'inscire automatiquement à l'événement de mort de la princesse pour pas oublier de le faire à chaque fois. En tout cas, ce chantier va permettre de travailler des niveaux indépendament les uns des autres et paralléliser si on veut être plusieurs à tweaker en parallèle.
This commit is contained in:
40
game.gd
40
game.gd
@@ -1,20 +1,38 @@
|
||||
extends Node
|
||||
class_name Game extends Node
|
||||
|
||||
@onready var transition_shader := $"TransitionShader"
|
||||
@onready var princesse := $"level/Princesse"
|
||||
|
||||
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
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
_on_transition_shader_fade_in_done()
|
||||
go_to(scene_name)
|
||||
|
||||
func reload_current_scene() -> void:
|
||||
go_to(scene_name)
|
||||
|
||||
func _on_transition_shader_fade_in_done() -> void:
|
||||
princesse.go_play()
|
||||
func enter_door(destination):
|
||||
call_deferred("go_to", destination)
|
||||
|
||||
func go_to(destination):
|
||||
if current_scence:
|
||||
remove_child(current_scence)
|
||||
|
||||
func _on_princesse_princesse_is_dead() -> void:
|
||||
_on_transition_shader_fade_out_done()
|
||||
if destination == "level_1":
|
||||
current_scence = level1.instantiate()
|
||||
scene_name = "level_1"
|
||||
elif destination == "level_0":
|
||||
current_scence = level0.instantiate()
|
||||
scene_name = "level_0"
|
||||
|
||||
|
||||
func _on_transition_shader_fade_out_done() -> void:
|
||||
get_tree(). reload_current_scene()
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user