ed-april-game/scripts/game_controller.gd

84 lines
2.0 KiB
GDScript3
Raw Normal View History

extends Node2D
2026-04-28 01:06:17 +00:00
signal destroy(body)
signal level_change_signal(level)
signal damage_player_signal(damage, player_health)
2026-06-02 01:08:48 +00:00
signal time_change(remaining_time)
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 = {}
2026-04-21 01:09:00 +00:00
var enemy_stats:CharacterStats
var player_stats:CharacterStats
2026-04-21 01:09:00 +00:00
func _ready():
get_window().grab_focus()
enemy_stats = load("res://scripts/resources/slime_stats.tres")
player_stats = load("res://scripts/resources/player_stats.tres")
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
2026-06-02 01:08:48 +00:00
time_change.emit(time_available)
if time_available <= 0:
print("you lose")
level_change_signal.emit(levels[current_level_index])
reset()
2026-04-21 01:09:00 +00:00
func reset():
2026-06-02 01:08:48 +00:00
print("reset")
time_available = level_times[current_level_index]
if player:
2026-06-02 01:08:48 +00:00
player.set_health(player_stats.starting_health)
func stop():
timer.stop()
2026-04-21 01:09:00 +00:00
func _process(delta):
pass
func _on_area_2d_trigger_active_signal(body, intentMessage):
print("game controller received trigger")
2026-04-28 01:06:17 +00:00
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
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):
2026-06-02 01:08:48 +00:00
damage_player_signal.emit(enemies[slime]["damage"], player.health)
func add_enemy(slime):
var enemy_stat = {
"health": enemy_stats.starting_health,
"damage": enemy_stats.melee_damage
}
enemies[slime] = enemy_stat
func _on_slime_struck(body, slime):
print("game controller sees slime struck")
func _on_player_dead(player):
print("game controller sees dead player")
level_change_signal.emit(levels[current_level_index])