Loading...
Loading...
Build a wave-based enemy spawning system with increasing difficulty and spawn points.
Create spawn points in your level. Add Position2D nodes where you want enemies to appear. Name them 'SpawnPoint1', 'SpawnPoint2', etc. Group them: Select all spawn points, right-click in Scene panel → 'Add to Group', name it 'spawn_points'. This lets you access all spawn points easily.
Create a SpawnManager autoload or node. Add variables: `var spawn_points = []`, `var enemy_scene = preload('res://scenes/Enemy.tscn')`, `var spawn_timer = Timer()`, `var wave_number = 1`, `var enemies_per_wave = 5`, `var spawn_interval = 2.0`. In `_ready()`: Get spawn points: `spawn_points = get_tree().get_nodes_in_group('spawn_points')`.
Implement wave system: `func start_wave():`, `for i in range(enemies_per_wave):`, `await get_tree().create_timer(spawn_interval).timeout`, `spawn_enemy()`. After wave completes: `await get_tree().create_timer(5.0).timeout` (break between waves), `wave_number += 1`, `enemies_per_wave += 2` (increase difficulty), `start_wave()`.
Create spawn_enemy function: `func spawn_enemy():`, `if spawn_points.is_empty(): return`, `var spawn_point = spawn_points.pick_random()`, `var enemy = enemy_scene.instantiate()`, `enemy.global_position = spawn_point.global_position`, `get_tree().current_scene.add_child(enemy)`. The pick_random() chooses a random spawn point for variety.
Control spawning from game manager. In your GameManager: Call `SpawnManager.start_wave()` when game starts. Track active enemies: `var active_enemies = 0`. When enemy dies: `active_enemies -= 1`, `if active_enemies <= 0: SpawnManager.start_next_wave()`. Add difficulty scaling: Increase spawn rate, enemy health, or enemy types as wave number increases. Display current wave in HUD: `wave_label.text = 'Wave: ' + str(SpawnManager.wave_number)`.