48 lines
1.2 KiB
GDScript
48 lines
1.2 KiB
GDScript
extends Node2D
|
|
|
|
var score :int = 0
|
|
var level :int = 1
|
|
var current_level_root :Node = null
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
current_level_root = get_node("LevelRoot")
|
|
_load_level(level)
|
|
|
|
func _load_level(level :int) -> void:
|
|
if current_level_root:
|
|
current_level_root.queue_free()
|
|
var level_path = "res://level%s" % level +".tscn"
|
|
current_level_root = load(level_path).instantiate()
|
|
add_child(current_level_root)
|
|
current_level_root.name = "LevelRoot"
|
|
_setup_level(current_level_root)
|
|
|
|
|
|
func _setup_level(level_root :Node) -> void:
|
|
var exit = level_root.get_node_or_null("Flag")
|
|
if exit:
|
|
exit.player_entered.connect(_on_exit_body_entered)
|
|
|
|
var enemies = level_root.get_node_or_null("Enemies")
|
|
if enemies:
|
|
for enemy in enemies.get_children():
|
|
enemy.player_died.connect(_on_player_dead)
|
|
var apples = level_root.get_node_or_null("Apples")
|
|
if apples:
|
|
for apple in apples.get_children():
|
|
apple.collected.connect(_increase_score)
|
|
|
|
func _on_player_dead(body):
|
|
body._die()
|
|
|
|
func _increase_score() -> void:
|
|
score += 1
|
|
print(score)
|
|
|
|
func _on_exit_body_entered(body: Node2D):
|
|
print(body)
|
|
level += 1
|
|
body.can_move = false
|
|
_load_level(level)
|