Пример #1
0
    private IEnumerator SpawnEnemiesDeffered(AlienStageWaveSettings alienStageSettings, Action <AlienEnemy> onAlienCreatedAction, float spawnStartDelay)
    {
        int firstRowIndex = FormationGrid.CurrentRowIndex;

        FormationGrid.ReserveRows(alienStageSettings.FormationSettings.RowsCount);

        yield return(new WaitForSeconds(spawnStartDelay));

        Vector3 spawnPosition = GetSpawnPosition();

        for (int i = 0; i < alienStageSettings.AlienCount; i++)
        {
            Vector3 formationPosition    = FormationGrid.EstimatePosition(i, firstRowIndex, alienStageSettings.FormationSettings.RowsCount);
            Vector3 currentSpawnPosition = ShouldInverseSpawnPosition(i) == true?spawnPosition.InverseX() : spawnPosition;

            AlienEnemy newAlien = CreateAlienEnemy(alienStageSettings.AlienEnemy, currentSpawnPosition);

            newAlien.SetFormationPosition(formationPosition);
            newAlien.SetAlienState(AlienEnemy.AlienStates.Appear);

            onAlienCreatedAction(newAlien);
            if (i % 2 != 0)
            {
                yield return(new WaitForSeconds(alienStageSettings.AlienSpawnDelay));
            }
        }
    }
Пример #2
0
    private AlienEnemy CreateAlienEnemy(AlienEnemy alienEnemyToSpawn, Vector3 spawnPosition)
    {
        AlienEnemy alienEnemy;

        alienEnemy = Instantiate(alienEnemyToSpawn, spawnPosition, Quaternion.identity, transform);

        return(alienEnemy);
    }
Пример #3
0
    private void HandleAlienDeath(AlienEnemy killedAlien)
    {
        CurrentWaveEnemies.Remove(killedAlien);
        killedAlien.UnregisterOnAlienDeathAction(HandleAlienDeath);

        OnAlienEnemyKilled(killedAlien);

        if (IsAnyAlienLeft() == false)
        {
            if (CurrentStageWaves.HasAnyElement() == true)
            {
                ResetFormationGrid();
                PrepareNewWave();
            }
            else
            {
                HandleStageFinished();
            }
        }
    }
Пример #4
0
    private void HandleNewAlienCreated(AlienEnemy newAlien)
    {
        CurrentWaveEnemies.Add(newAlien);

        newAlien.RegisterOnAlienDeathAction(HandleAlienDeath);
    }
Пример #5
0
 private void HandlePlayerKilledAlien(AlienEnemy alienEnemy)
 {
     PlayerManager.AddPlayerKillCount();
     PlayerManager.AddPlayerScore(alienEnemy.ScoreOnKill);
     UIManager.SetPlayerScore(PlayerManager.PlayerScore);
 }