46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
#include "wave.h"
|
|
#include "game_state.h"
|
|
#include "components.h"
|
|
|
|
WaveInfo getWaveInfo(i32 idx) {
|
|
BZ_ASSERT(idx >= 0);
|
|
WaveData waveData;
|
|
if (idx >= NUM_WAVES) {
|
|
waveData = predefWaves[NUM_WAVES - 1];
|
|
waveData.difficultyScale += (idx - NUM_WAVES) * 0.1f;
|
|
|
|
} else {
|
|
waveData = predefWaves[idx];
|
|
}
|
|
|
|
WaveInfo info = {
|
|
.number = idx,
|
|
.data = waveData,
|
|
.orcsToSend = waveData.numOrcs,
|
|
.goblinsToSend = waveData.numGoblins,
|
|
};
|
|
info.data.timeBeforeStart /= 60;
|
|
|
|
return info;
|
|
}
|
|
|
|
void updateWave(WaveInfo *wave, f32 dt) {
|
|
wave->orcsElapsed += dt;
|
|
wave->goblinsElapsed += dt;
|
|
wave->elapsed += dt;
|
|
if (wave->elapsed < wave->data.timeBeforeStart)
|
|
return;
|
|
wave->started = true;
|
|
|
|
}
|
|
|
|
bool isWaveSendingOver(const WaveInfo *wave) {
|
|
return wave->orcsToSend == 0 && wave->goblinsToSend == 0;
|
|
}
|
|
bool isWaveOver(const WaveInfo *wave) {
|
|
if (!isWaveSendingOver(wave)) return false;
|
|
|
|
return wave->started && ecs_count_id(ECS, ecs_id(Swarm)) == 0;
|
|
}
|
|
|