Files
Defensaria/Game/Maps/map_managger.gd
2025-08-31 12:13:36 +02:00

85 lines
2.1 KiB
GDScript

extends Node2D
var paths = []
var waves = []
const FORKMAN = preload("res://Game/Mobs/forkman.tscn")
const ORK = preload("res://Game/Mobs/ork.tscn")
const COBOLD = preload("res://Game/Mobs/cobold.tscn")
const enemies = [FORKMAN, COBOLD, ORK]
var pause = 40
func _ready() -> void:
get_node("CanvasLayer/SidePanel").set_Lifes(get_node("Setup").lives)
get_node("CanvasLayer/SidePanel").Update_Coins(get_node("Setup").coins)
for i in self.get_children():
if i.name.contains("Path2D"):
paths.append(i)
waves = get_node("Setup").waves
print(waves)
print(paths)
#the meaning of the columns inside my wave generation matris:
# Number of enemies need to be spawned, chance of spawn an enemy, chance of forkman, chance of gobline, chance of ork
var currentwave = 0
var endwave = false
func _on_timer_timeout() -> void:
if pause <= 0:
if endwave:
var checkend = false
for i in paths:
if i.get_children():
break
checkend = true
currentwave += 1
if checkend:
endwave = false
get_node("CanvasLayer/SidePanel").Update_waves(currentwave + 1) #updating waves
if currentwave >= waves[0].size():
get_node("CanvasLayer/SidePanel").Update_waves(currentwave) #updating waves
get_node("Timer").stop()
get_node("CanvasLayer/SidePanel").GameWon()
else:
spawnMonster()
else:
pause -= 1
func spawnMonster():
for ROUTE in range(waves.size()):
var w = waves[ROUTE][currentwave]
if w[0] > 0:
if randf() < w[1]:
w[0] -= 1
for i in waves:
if i[currentwave][0] > 0:
break
endwave = true
var chosen = randf()
var sum = 0.0
for i in range(2,5):
sum += w[i]
if chosen < sum:
var monster = enemies[i-2].instantiate()
var path = PathFollow2D.new()
path.add_child(monster)
paths[ROUTE].add_child(path)
break
func decrease_life(damage) -> void:
get_node("CanvasLayer/SidePanel").Update_Lifes(-damage)
if get_node("CanvasLayer/SidePanel").get_Lifes() <= 0:
game_over()
func game_over()-> void:
get_node("Timer").stop()
var enemy = get_node("Path2D").get_children()
for i in enemy:
i.get_children()[0].set_process(false)