public void StartSpawn() { Initialize(); _IsSpawning = true; _CurrentState = SPAWNING_STATE.PRE_BEFORE_SPAWN_WAIT; SpawnCount = 0; }
public virtual void UpdateSpawn() { if (!_IsSpawning) { return; } if (IsPlaying) { if (_CurrentState == SPAWNING_STATE.PRE_BEFORE_SPAWN_WAIT) { // set target time _TargetWaitTime = Random.Range(MinRandomWait, MaxRandomWait); // reset wait time _CurrentWaitTime = 0; this._CurrentState = SPAWNING_STATE.BEFORE_SPAWN_WAIT; } else if (_CurrentState == SPAWNING_STATE.BEFORE_SPAWN_WAIT) { // reached the timer. Spawn if (_CurrentWaitTime >= _TargetWaitTime) { this._CurrentState = SPAWNING_STATE.SPAWN; } else { // increase time to target _CurrentWaitTime += Time.deltaTime; } } else if (_CurrentState == SPAWNING_STATE.SPAWN) { if (KilledEnemies >= MinKilledEnemies) { // reset killed enemies KilledEnemies = 0; int randomNumber = Random.Range(0, RandomRange); // spawn chance if (randomNumber < SpawnWhenLessThan) { _CurrentSpawnedEntity = Spawn(); _CurrentState = SPAWNING_STATE.AFTER_SPAWN_WAIT; } else { // no spawn chance? back to first state _CurrentState = SPAWNING_STATE.PRE_BEFORE_SPAWN_WAIT; } } } else if (_CurrentState == SPAWNING_STATE.AFTER_SPAWN_WAIT) { if (_CurrentSpawnedEntity != null) { if (!SpawnWaiter(_CurrentSpawnedEntity)) { _CurrentState = SPAWNING_STATE.PRE_BEFORE_SPAWN_WAIT; } } else { // no spawn entity? back to first state _CurrentState = SPAWNING_STATE.PRE_BEFORE_SPAWN_WAIT; } } } }