mirror of
https://github.com/MartinKral/Slash-The-Hordes
synced 2025-09-24 04:39:05 +00:00
Enemy lifetime
This commit is contained in:
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user