76 lines
1.7 KiB
GDScript
76 lines
1.7 KiB
GDScript
extends Node2D
|
|
|
|
signal destroy(body)
|
|
signal level_change_signal(level)
|
|
|
|
var levels = ["res://scenes/level1.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"]
|
|
var current_level_index = 0
|
|
var level_times = [15,20,25]
|
|
var time_available = 0
|
|
|
|
var timer = Timer.new()
|
|
var player:Player;
|
|
var enemies = {}
|
|
|
|
func _ready():
|
|
get_window().grab_focus() # Replace with function body.
|
|
reset()
|
|
add_child(timer)
|
|
timer.wait_time = 1
|
|
timer.one_shot = false
|
|
timer.connect("timeout", timer_tick)
|
|
timer.start()
|
|
|
|
func timer_tick():
|
|
time_available -= 1
|
|
if time_available <= 0:
|
|
print("you lose")
|
|
level_change_signal.emit(levels[current_level_index])
|
|
reset()
|
|
|
|
func reset():
|
|
time_available = level_times[current_level_index]
|
|
if player:
|
|
player.health = 5
|
|
|
|
func stop():
|
|
timer.stop()
|
|
|
|
func _process(delta):
|
|
pass
|
|
|
|
func _on_area_2d_trigger_active_signal(body, intentMessage):
|
|
print("game controller received trigger")
|
|
if intentMessage == "destroy" and body.is_in_group("destructable"):
|
|
destroy.emit(body)
|
|
|
|
var crate_num : int = 0
|
|
func set_crate_num(count: int):
|
|
crate_num = count
|
|
# print("number of crates: " + str(crate_num))
|
|
if crate_num <= 0:
|
|
current_level_index += 1
|
|
if current_level_index == levels.size():
|
|
print("You Win!")
|
|
stop()
|
|
else:
|
|
level_change_signal.emit(levels[current_level_index])
|
|
reset()
|
|
|
|
func _on_slime_damage(body, slime):
|
|
print("game controller sees slime damage")
|
|
player.health -= enemies[slime]["damage"]
|
|
if player.health <= 0:
|
|
print("dead")
|
|
level_change_signal.emit(levels[current_level_index])
|
|
|
|
func add_enemy(slime):
|
|
var enemy_stat = {
|
|
"health": 5,
|
|
"damage": 3
|
|
}
|
|
enemies[slime] = enemy_stat
|
|
|
|
func _on_slime_struck(body, slime):
|
|
print("game controller sees slime struck")
|