Untitled

 avatar
unknown
plain_text
2 years ago
2.3 kB
6
Indexable
extends Node2D
class_name WaveSystem

var cash_gained = 0
var xp_gained = 0

signal wave_changed

export(Array, int) var waves
export(Array, float) var spawn_rate
export(Array, PackedScene) var enemies
export(Array, NodePath) var spawn_positions_paths

var spawn_positions = []

var enemies_spawned = 0
var current_enemies = 0

var wave_enemies = -1
export var current_wave = 0

var wave_spawn_rate = -1
var current_wave_spawn_rate = 0

func _ready():
	Global.cash_gained = 0
	Global.xp_gained = 0
	for i in spawn_positions_paths.size():
		spawn_positions.append(get_node(spawn_positions_paths[i]).position)
	start_next_wave()
	

func _process(_delta):
#	print(cash_gained)
	if current_wave == waves.size() && current_enemies == 0:
		waves_completed()
		return
#	print(waves)
#	print("Enemies spawned: : ",enemies_spawned)
#	print ("Current wave: ",current_wave)
#	print("Current enemies in current wave: ",waves[wave_enemies])
#	print("enemies current wave: ", enemies_current_wave)
#	print("Enemeis to spawn: ",enemies_spawned)
#	print("MAX WAVES: ",waves.size())

func start_next_wave():
	emit_signal("wave_changed")
	enemies_spawned = 0
	$SpawnRate.start()
	if current_wave < waves.size():
		current_wave += 1
		
		wave_enemies += 1
		wave_spawn_rate += 1
		
		current_wave_spawn_rate = spawn_rate[wave_spawn_rate]
		$SpawnRate.wait_time = current_wave_spawn_rate
		
		current_enemies = waves[wave_enemies]

func spawn_enemy():
	enemies_spawned += 1
	var select_random_enemy = rand_range(0, enemies.size())
	var enemy = enemies[select_random_enemy].instance()
	enemy.position = spawn_positions[randi() % spawn_positions.size()]
	add_child(enemy)

func waves_completed():
	Global.cash_gained = cash_gained
	Global.cash += cash_gained
	Global.cash + Global.cash_gained
	Global.update_data()
	Global.save_game()
	get_tree().change_scene("res://Scenes/Menu/MapCompleted.tscn")

# get_tree().get_root().get_node("/root/Game/WaveSystem").call_deferred("_enemy_died")
func _enemy_died():
	current_enemies -= 1

func _on_SpawnRate_timeout():
	if enemies_spawned < waves[wave_enemies]:
		spawn_enemy()
	elif current_enemies == 0:
		start_next_wave()
	elif current_enemies != 0:
		return
Editor is loading...