summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Game.gd42
-rw-r--r--scripts/Ladder.gd4
-rw-r--r--scripts/PlayerCharacter.gd10
3 files changed, 44 insertions, 12 deletions
diff --git a/scripts/Game.gd b/scripts/Game.gd
new file mode 100644
index 0000000..e36fdfe
--- /dev/null
+++ b/scripts/Game.gd
@@ -0,0 +1,42 @@
+extends Node
+class_name Game
+onready var gui: GUI = $CanvasLayer/GUI
+
+# Declare member variables here. Examples:
+# var a = 2
+# var b = "text"
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready():
+ update_debug_gui()
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+#func _process(delta):
+# pass
+
+func update_debug_gui():
+ var current_level = $Level.get_filename()
+ gui.set_debug_text("Level: %s" % current_level)
+
+func _on_Level_ready():
+ yield(get_tree(), "idle_frame")
+ update_debug_gui()
+
+func change_level(num: int):
+ var new_scene = "res://scenes/Level" + String(num) + ".tscn"
+
+ var cur_level = $Level
+ self.remove_child(cur_level)
+ cur_level.call_deferred("free")
+
+ var new_level_res = load(new_scene)
+ var new_level: Node = new_level_res.instance()
+
+ print("Changed level to " + new_scene)
+ var err = new_level.connect("ready", self, "_on_Level_ready")
+ if err:
+ push_error(err)
+
+ self.add_child(new_level)
+ new_level.set_name("Level")
diff --git a/scripts/Ladder.gd b/scripts/Ladder.gd
index c21752b..9c566da 100644
--- a/scripts/Ladder.gd
+++ b/scripts/Ladder.gd
@@ -18,5 +18,5 @@ func _ready():
func _on_Ladder_body_entered(body):
if body is PlayerCharacter:
- var player: PlayerCharacter = body
- player.change_level(target_scene_num)
+ var game: Game = get_tree().get_root().get_node("Game")
+ game.call_deferred("change_level", target_scene_num)
diff --git a/scripts/PlayerCharacter.gd b/scripts/PlayerCharacter.gd
index 1df100c..3cf4518 100644
--- a/scripts/PlayerCharacter.gd
+++ b/scripts/PlayerCharacter.gd
@@ -65,13 +65,3 @@ func _physics_process(_delta):
dialogue_active_with = coll.collider
run_dialogue(coll.collider)
break
-
-func change_level(num: int):
- var new_scene = "res://scenes/Scene" + String(num) + ".tscn"
- var gui: GUI = get_node(gui_node)
- var success = get_tree().change_scene(new_scene)
- if success == OK:
- gui.set_debug_text("Level: %s" % num)
- print("Changed level to " + new_scene)
- else:
- push_error("Failed to change level to " + new_scene)