summaryrefslogtreecommitdiff
path: root/scripts/wave_spawner.gd
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/wave_spawner.gd')
-rw-r--r--scripts/wave_spawner.gd77
1 files changed, 58 insertions, 19 deletions
diff --git a/scripts/wave_spawner.gd b/scripts/wave_spawner.gd
index 0b4ca2e..eea656f 100644
--- a/scripts/wave_spawner.gd
+++ b/scripts/wave_spawner.gd
@@ -1,36 +1,75 @@
extends Node2D
@onready var map_config = preload("res://resources/map_generator_resource.tres")
+@onready var game_stats_config = preload("res://resources/game_stats_config.tres")
@onready var fodder_enemy = preload("res://scenes/fodder.tscn")
+@onready var soldier_enemy = preload("res://scenes/soldier.tscn")
@onready var map = get_node("../Map")
-var curve : Curve2D
+@onready var _wave_timer = $Timer
+@onready var _wave_pool : Array[Array]
+@onready var _path : Path2D
func _ready() -> void:
- curve = Curve2D.new()
-
- var path : Array[Vector2i] = map.get_enemy_path()
+ _wave_pool = [
+ [fodder_enemy , soldier_enemy],
+ ]
+ _wave_timer = game_stats_config.wave_time
+ var curve : Curve2D = Curve2D.new()
+ var points : Array[Vector2i] = map.get_enemy_path()
# add off-screen points
- path.insert(0, path[0] - Vector2i(1, 0))
- path.append(path[path.size() - 1] + Vector2i(1, 0))
-
- # adjust to grid size
- for i in map.get_enemy_path():
+ points.insert(0, points[0] - Vector2i(1, 0))
+ points.append(points[points.size() - 1] + Vector2i(1, 0))
+ # scale to grid size
+ for i in points:
curve.add_point(i * map_config.tile_size + Vector2i.ONE * (map_config.tile_size / 2))
+ _path = Path2D.new()
+ _path.curve = curve
+ add_child(_path)
+
func _on_timer_timeout():
- var path = Path2D.new()
- path.curve = curve
+ var current_wave : int = GameData.get_current_wave()
+ # TODO win screen should play instead
+ if current_wave > 1:
+ return
- var follow_path = PathFollow2D.new()
- follow_path.set_progress(0)
- follow_path.rotates = false
- follow_path.loop = false
+ spawn_wave(current_wave)
+ GameData.increment_wave()
- var enemy = fodder_enemy.instantiate()
+func spawn_wave(current_wave):
+ var selected_crawlers: Array = []
+ var total_worth : int = 0
+ var target_worth : int = game_stats_config.wave_targets[current_wave]
- follow_path.add_child(enemy)
- path.add_child(follow_path)
+ while total_worth < target_worth:
+ var crawler_type = _select_crawler(current_wave)
+ if crawler_type:
+ selected_crawlers.append(crawler_type)
+ # FIXME
+ total_worth += 2
- add_child(path)
+ var spawn_interval: float = game_stats_config.wave_time / selected_crawlers.size()
+
+ for crawler in selected_crawlers:
+ await get_tree().create_timer(spawn_interval).timeout
+ _spawn_crawler(crawler)
+
+func _select_crawler(current_wave) -> PackedScene:
+ var curr_wave_pool = _wave_pool[current_wave - 1]
+ print(curr_wave_pool)
+ if randi() % 100 < 70:
+ # spawn fodder
+ return curr_wave_pool[0]
+ else:
+ var non_fodder = curr_wave_pool.slice(1, curr_wave_pool.size())
+ return non_fodder[randi() % non_fodder.size()]
+
+func _spawn_crawler(crawler : PackedScene):
+ var follow_path : PathFollow2D = PathFollow2D.new()
+ follow_path.set_progress(0)
+ follow_path.rotates = false
+ follow_path.loop = false
+ _path.add_child(follow_path)
+ follow_path.add_child(crawler.instantiate())