Start stop spawner delay

This commit is contained in:
Martin
2022-12-12 13:12:07 +01:00
parent 07996fdd6a
commit 0886d1d7e4
9 changed files with 69 additions and 27 deletions

View File

@@ -1,13 +1,17 @@
import { GameTimer } from "../../../../Services/GameTimer";
import { roundToOneDecimal } from "../../../../Services/Utils/MathUtils";
import { DelayedEnemySpawner } from "./DelayedEnemySpawner";
import { EnemySpawner } from "./EnemySpawner";
export class CircularEnemySpawner {
export class CircularEnemySpawner extends DelayedEnemySpawner {
private spawnTimer: GameTimer = new GameTimer(10);
public constructor(private enemySpawner: EnemySpawner, private enemiesToSpawn: number, private enemyId: string) {}
public constructor(private enemySpawner: EnemySpawner, private enemiesToSpawn: number, private enemyId: string, startDelay = 0, stopDelay = 100) {
super(startDelay, stopDelay);
}
public gameTick(deltaTime: number): void {
public delayedGameTick(deltaTime: number): void {
this.spawnTimer.gameTick(deltaTime);
if (this.spawnTimer.tryFinishPeriod()) {

View File

@@ -0,0 +1,13 @@
export abstract class DelayedEnemySpawner {
private currentTime = 0;
public constructor(private startDelay: number, private stopDelay: number) {}
public gameTick(deltaTime: number): void {
this.currentTime += deltaTime;
if (this.startDelay <= this.currentTime && this.currentTime <= this.stopDelay) {
this.delayedGameTick(deltaTime);
}
}
public abstract delayedGameTick(deltaTime: number): void;
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "98291995-7dbb-40da-bce6-4ca9dd7cc45f",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -4,7 +4,6 @@ import { Signal } from "../../../../Services/EventSystem/Signal";
import { ObjectPool } from "../../../../Services/ObjectPool";
import { EnemySettings } from "../../../Data/GameSettings";
import { Enemy } from "../Enemy";
import { EnemyMovementType } from "../EnemyMovementType";
const { ccclass, property } = _decorator;

View File

@@ -1,14 +1,17 @@
import { randomRange } from "cc";
import { GameTimer } from "../../../../Services/GameTimer";
import { randomPositiveOrNegative } from "../../../../Services/Utils/MathUtils";
import { DelayedEnemySpawner } from "./DelayedEnemySpawner";
import { EnemySpawner } from "./EnemySpawner";
export class IndividualEnemySpawner {
export class IndividualEnemySpawner extends DelayedEnemySpawner {
private spawnTimer: GameTimer = new GameTimer(1);
public constructor(private enemySpawner: EnemySpawner, private enemyId: string) {}
public constructor(private enemySpawner: EnemySpawner, private enemyId: string, startDelay = 0, stopDelay = 100) {
super(startDelay, stopDelay);
}
public gameTick(deltaTime: number): void {
public delayedGameTick(deltaTime: number): void {
this.spawnTimer.gameTick(deltaTime);
if (this.spawnTimer.tryFinishPeriod()) {
const posX: number = randomRange(300, 600) * randomPositiveOrNegative();

View File

@@ -3,9 +3,10 @@ import { GameTimer } from "../../../../Services/GameTimer";
import { randomPositiveOrNegative } from "../../../../Services/Utils/MathUtils";
import { WaveEnemySpawnerSettings } from "../../../Data/GameSettings";
import { Enemy } from "../Enemy";
import { DelayedEnemySpawner } from "./DelayedEnemySpawner";
import { EnemySpawner } from "./EnemySpawner";
export class WaveEnemySpawner {
export class WaveEnemySpawner extends DelayedEnemySpawner {
private enemiesPerWave: number;
private waveLifetime: number;
private enemyId: string;
@@ -14,13 +15,15 @@ export class WaveEnemySpawner {
private waves: EnemyWave[] = [];
public constructor(private enemySpawner: EnemySpawner, settings: WaveEnemySpawnerSettings) {
super(settings.startDelay, settings.stopDelay);
this.spawnTimer = new GameTimer(settings.cooldown);
this.enemiesPerWave = settings.enemiesPerWave;
this.waveLifetime = settings.waveLifetime;
this.enemyId = settings.enemyId;
}
public gameTick(deltaTime: number): void {
public delayedGameTick(deltaTime: number): void {
this.spawnTimer.gameTick(deltaTime);
this.tryRemoveExpiredEnemies(deltaTime);