Enemy lifetime

This commit is contained in:
Martin
2022-12-13 18:56:00 +01:00
parent 7e50e5c672
commit b3e9664351
9 changed files with 64 additions and 45 deletions

View File

@@ -49,6 +49,7 @@ export class EnemySpawner extends Component {
enemy.setup(spawnPosition, this.idToSettings.get(id));
enemy.DeathEvent.on(this.returnEnemy, this);
enemy.LifetimeEndedEvent.on(this.returnEnemy, this);
this.enemyAddedEvent.trigger(enemy);
@@ -57,6 +58,8 @@ export class EnemySpawner extends Component {
public returnEnemy(enemy: Enemy): void {
enemy.DeathEvent.off(this.returnEnemy);
enemy.LifetimeEndedEvent.off(this.returnEnemy);
this.enemyPool.return(enemy);
this.enemyRemovedEvent.trigger(enemy);

View File

@@ -8,46 +8,20 @@ import { EnemySpawner } from "./EnemySpawner";
export class WaveEnemySpawner extends DelayedEnemySpawner {
private enemiesPerWave: number;
private waveLifetime: number;
private enemyId: string;
private spawnTimer: GameTimer;
private waves: EnemyWave[] = [];
public constructor(private enemySpawner: EnemySpawner, settings: WaveEnemySpawnerSettings) {
super(settings.common.startDelay, settings.common.stopDelay);
this.spawnTimer = new GameTimer(settings.common.cooldown);
this.enemiesPerWave = settings.enemiesToSpawn;
this.waveLifetime = settings.waveLifetime;
this.enemyId = settings.common.enemyId;
}
public delayedGameTick(deltaTime: number): void {
this.spawnTimer.gameTick(deltaTime);
this.tryRemoveExpiredEnemies(deltaTime);
this.trySpawnNewGroup();
}
private tryRemoveExpiredEnemies(deltaTime: number): void {
for (let i = this.waves.length - 1; 0 <= i; i--) {
const wave: EnemyWave = this.waves[i];
wave.lifeTimeLeft -= deltaTime;
if (wave.lifeTimeLeft <= 0) {
for (const enemy of wave.enemies) {
if (enemy.Health.IsAlive) {
this.enemySpawner.returnEnemy(enemy);
}
}
this.waves.splice(i, 1);
}
}
}
private trySpawnNewGroup(): void {
if (this.spawnTimer.tryFinishPeriod()) {
const defaultPosX: number = (500 + randomRange(0, 100)) * randomPositiveOrNegative();
const defaultPosY: number = randomRange(0, 500) * randomPositiveOrNegative();
@@ -62,13 +36,6 @@ export class WaveEnemySpawner extends DelayedEnemySpawner {
const enemy = this.enemySpawner.spawnNewEnemy(posX, posY, this.enemyId);
enemies.push(enemy);
}
this.waves.push({ enemies, lifeTimeLeft: this.waveLifetime });
}
}
}
class EnemyWave {
public enemies: Enemy[];
public lifeTimeLeft: number;
}