Example #1
0
    public void StartSpawn()
    {
        Initialize();

        _IsSpawning   = true;
        _CurrentState = SPAWNING_STATE.PRE_BEFORE_SPAWN_WAIT;

        SpawnCount = 0;
    }
Example #2
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;
                }
            }
        }
    }