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") @onready var _wave_timer = $Timer @onready var _wave_pool : Array[Array] @onready var _path : Path2D func _ready() -> void: _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 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 current_wave : int = GameData.get_current_wave() # TODO win screen should play instead if current_wave > 1: return spawn_wave(current_wave) GameData.increment_wave() 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] while total_worth < target_worth: var crawler_type = _select_crawler(current_wave) if crawler_type: selected_crawlers.append(crawler_type) # FIXME total_worth += 2 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())