Wave generation redesign
This commit is contained in:
85
Game/Maps/map_managger.gd
Normal file
85
Game/Maps/map_managger.gd
Normal file
@ -0,0 +1,85 @@
|
||||
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 not i.get_children():
|
||||
checkend = true
|
||||
currentwave += 1
|
||||
if checkend:
|
||||
endwave = false
|
||||
get_node("CanvasLayer/SidePanel").Update_waves(currentwave + 1) #updating waves
|
||||
if currentwave >= waves[0].size():
|
||||
currentwave -= 1
|
||||
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]
|
||||
print("Rout enumber: ",ROUTE," Array of wave: ",w, " Wave indexer: ", currentwave)
|
||||
if w[0] > 0:
|
||||
if randf() < w[1]: #chance of generating any kind of enemy
|
||||
w[0] -= 1
|
||||
for i in waves:
|
||||
print("Check for wave ends: ",i[currentwave])
|
||||
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)
|
||||
|
Reference in New Issue
Block a user