ape-ame/Spawner.gd

62 lines
1.7 KiB
GDScript3
Raw Normal View History

2024-04-25 15:27:00 -04:00
extends Node2D
2024-04-16 20:29:45 -04:00
2024-04-25 15:27:00 -04:00
@export var waves: Array[Wave]
2024-04-26 16:32:56 -04:00
@export var wave_label: Label
2024-04-22 07:51:43 -04:00
var portal = preload("res://portal.tscn")
2024-04-25 15:27:00 -04:00
var enemies_previous = false
2024-04-26 16:32:56 -04:00
var wave_count = 0
2024-04-16 20:29:45 -04:00
2024-04-25 15:27:00 -04:00
func _ready():
spawn_loop()
2024-04-23 14:38:44 -04:00
2024-04-25 15:27:00 -04:00
signal all_enemies_perished
func check_enemies_loop():
var has_enemies = len(get_tree().get_nodes_in_group("enemy")) > 0
if enemies_previous and not has_enemies:
all_enemies_perished.emit()
enemies_previous = has_enemies
func spawn_loop():
for wave in waves:
2024-04-26 16:32:56 -04:00
wave_count += 1
wave_label.text = "Wave %d" % wave_count
2024-04-25 15:27:00 -04:00
print("Starting Next Wave")
for i in range(len(wave.enemies)):
spawn_enemies(wave.quantities[i], wave.spawning_duration, wave.enemies[i])
if wave.wait_for_killed:
await all_enemies_perished
2024-04-25 20:56:12 -04:00
else:
await get_tree().create_timer(wave.spawning_duration).timeout
await get_tree().create_timer(wave.wait).timeout
2024-04-25 15:27:00 -04:00
2024-04-26 16:32:56 -04:00
$"../GameOver".text = "YOU WIN!"
$"../Player".destroy()
2024-04-25 15:27:00 -04:00
func spawn_enemies(count: int, duration: float, enemy: WaveEnemy):
var delay = duration / count
for i in range(count):
await get_tree().create_timer(delay).timeout
spawn(enemy)
func spawn(item: WaveEnemy):
2024-04-23 14:38:44 -04:00
2024-04-20 09:45:17 -04:00
var spawn_loc = Vector2.ZERO
2024-04-25 15:27:00 -04:00
2024-04-16 20:29:45 -04:00
for i in range(10):
var test_pos = Vector2(randf(), randf()) * Vector2(1920, 1080)
2024-04-25 15:27:00 -04:00
if not $"../CollisionCheck".is_clear(test_pos, item.check_distance):
2024-04-16 20:29:45 -04:00
continue
2024-04-20 09:45:17 -04:00
spawn_loc = test_pos
2024-04-16 20:29:45 -04:00
break
2024-04-23 14:38:44 -04:00
2024-04-25 15:27:00 -04:00
var portal_effect = portal.instantiate()
portal_effect.global_position = spawn_loc
portal_effect.sprite_frames = item.portal_texture
$/root/Node2D.add_child(portal_effect)
await get_tree().create_timer(0.6).timeout
var node = item.enemy.instantiate()
node.global_position = spawn_loc
node.rotation_degrees = 360 * randf()
$/root/Node2D.add_child(node)