wave spawner, game phases, making game window larger
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package game
|
||||
|
||||
Game_Phase :: enum {
|
||||
Build,
|
||||
Combat,
|
||||
}
|
||||
|
||||
Wave_Spawner :: struct {
|
||||
enemies_to_spawn: int,
|
||||
spawn_timer: f32,
|
||||
spawn_interval: f32,
|
||||
}
|
||||
|
||||
start_wave :: proc(world: ^World) {
|
||||
if world.phase != .Build do return
|
||||
world.wave += 1
|
||||
world.phase = .Combat
|
||||
world.spawner = Wave_Spawner {
|
||||
enemies_to_spawn = 5 + world.wave * 2,
|
||||
spawn_timer = 0,
|
||||
spawn_interval = 0.55,
|
||||
}
|
||||
}
|
||||
|
||||
update_wave :: proc(world: ^World, dt: f32) {
|
||||
if world.phase != .Combat do return
|
||||
if world.spawner.enemies_to_spawn <= 0 do return
|
||||
if len(world.path) < 2 do return
|
||||
|
||||
world.spawner.spawn_timer -= dt
|
||||
if world.spawner.spawn_timer <= 0 {
|
||||
health := 15 + world.wave * 5
|
||||
speed := 55 + f32(world.wave) * 5
|
||||
spawn_enemy(world, health, speed)
|
||||
world.spawner.enemies_to_spawn -= 1
|
||||
world.spawner.spawn_timer = world.spawner.spawn_interval
|
||||
}
|
||||
}
|
||||
|
||||
wave_clear :: proc(world: ^World) -> bool {
|
||||
if world.spawner.enemies_to_spawn > 0 do return false
|
||||
return active_enemy_count(world) == 0
|
||||
}
|
||||
|
||||
update_phase :: proc(world: ^World) {
|
||||
if world.phase == .Combat && wave_clear(world) {
|
||||
world.phase = .Build
|
||||
push_event(world, .Wave_Survived, gold_reward = 25)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user