예제 #1
0
    public EnemyDropParameters GetEnemyDropParameters(EnemyShipPoolTag enemyTag)
    {
        EnemyDropParameters parameters = null;

        foreach (EnemyTagWithDropParameters enemyWithDropParams in allEnemiesDropParameters)
        {
            if (enemyTag == enemyWithDropParams.GetEnemyTag)
            {
                parameters = enemyWithDropParams.GetDropParameters;
                break;
            }
        }

        if (parameters == null)
        {
            Debug.LogWarning("Impossible de trouver des paramètres de drop pour l'ennemi spawné : aucun drop sur l'ennemi");
        }

        return(parameters);
    }
예제 #2
0
    public EnemyShip GetEnemyShip(EnemyShipPoolTag tag, PoolInteractionType interactionType)
    {
        if (enemyShipsPoolsDisctionary == null)
        {
            if (interactionType == PoolInteractionType.PeekPrefab)
            {
                foreach (EnemyShipsPool enemyPool in enemyShipsPool)
                {
                    if (enemyPool.GetEnemyPoolTag == tag)
                    {
                        return(enemyPool.PeekPrefab());
                    }
                }
            }

            return(null);
        }

        if (!enemyShipsPoolsDisctionary.ContainsKey(tag))
        {
            return(null);
        }

        switch (interactionType)
        {
        case (PoolInteractionType.GetFromPool):
            return(enemyShipsPoolsDisctionary[tag].GetObjectFromPool());

        case (PoolInteractionType.PeekFromPool):
            return(enemyShipsPoolsDisctionary[tag].PeekObjectFromPool());

        case (PoolInteractionType.PeekPrefab):
            return(enemyShipsPoolsDisctionary[tag].PeekPrefab());
        }

        return(null);
    }
예제 #3
0
    public List <IDamageReceiver> SpawnEnemies()
    {
        spawned = true;

        List <EnemySpawnPoint> availableCommonSpawnPoints = new List <EnemySpawnPoint>(commonEnemiesSpawnPoints);
        List <EnemySpawnPoint> availableRareSpawnPoints   = new List <EnemySpawnPoint>(rareEnemiesSpawnPoints);

        spawnedEnemies = new List <IDamageReceiver>();

        bool stopSpawnedEnemies = false;

        if (cinematicToPlayOnWaveStart != null)
        {
            stopSpawnedEnemies = cinematicToPlayOnWaveStart.StopSpawnedEnemies || spawnedEnemiesAreStopped;
        }
        else
        {
            stopSpawnedEnemies = spawnedEnemiesAreStopped;
        }

        List <EnemyShip> allSpawnedEnemies = new List <EnemyShip>();

        PlayerShip playerShip = GameManager.gameManager.Player;

        #region Common
        for (int i = 0; i < numberOfCommonEnemies; i++)
        {
            if (availableCommonSpawnPoints.Count == 0)
            {
                Debug.Log("pas de spawn points disponibles : impossible de spawner l'ennemi commun");
                break;
            }
            EnemySpawnPoint chosenSpawnPoint = availableCommonSpawnPoints.GetRandomMemberOfTheList();

            EnemyShipPoolTag enemyPoolTag = commonEnemies.GetRandomElementFromSystem();

            EnemyShip spawnedEnemy = GameManager.gameManager.PoolManager.GetEnemyShip(enemyPoolTag, PoolInteractionType.GetFromPool);
            spawnedEnemy.transform.position = chosenSpawnPoint.transform.position;
            spawnedEnemy.transform.rotation = chosenSpawnPoint.transform.rotation;

            spawnedEnemy.ExternalSetUp(chosenSpawnPoint.GetLinkedWatchingRoundParameters);

            availableCommonSpawnPoints.Remove(chosenSpawnPoint);

            spawnedEnemies.Add(spawnedEnemy.GetShipDamageReceiver);
            spawnedEnemy.GetShipDamageReceiver.OnDeath += new OnLifeEvent(RemoveSpawnedEnemy);

            spawnedEnemy.SetDropParameters(dropParameters.GetEnemyDropParameters(enemyPoolTag));

            allSpawnedEnemies.Add(spawnedEnemy);

            if (commonEnemiesHighlightingType != HighlightingType.None)
            {
                spawnedEnemy.StartEnemyHighlighting(playerShip, commonEnemiesHighlightingType == HighlightingType.Important);
                //if (!spawnedEnemiesArentHighlighted)
                //playerShip.StartEnemyHighlighting(spawnedEnemy);
            }

            if (stopSpawnedEnemies)
            {
                spawnedEnemy.ShipMvt.InstantStopShip();
            }

            if (spawnedEnemiesAutoDetectPlayer)
            {
                spawnedEnemy.AutoDetectPlayer();
            }
        }
        #endregion

        #region Rare
        for (int i = 0; i < numberOfRareEnemies; i++)
        {
            if (availableRareSpawnPoints.Count == 0)
            {
                Debug.Log("pas de spawn points disponibles : impossible de spawner l'ennemi rare");
                break;
            }

            EnemySpawnPoint chosenSpawnPoint = availableRareSpawnPoints.GetRandomMemberOfTheList();

            EnemyShipPoolTag enemyPoolTag = rareEnemies.GetRandomElementFromSystem();

            EnemyShip spawnedEnemy = GameManager.gameManager.PoolManager.GetEnemyShip(enemyPoolTag, PoolInteractionType.GetFromPool);
            spawnedEnemy.transform.position = chosenSpawnPoint.transform.position;
            spawnedEnemy.transform.rotation = chosenSpawnPoint.transform.rotation;

            spawnedEnemy.ExternalSetUp(chosenSpawnPoint.GetLinkedWatchingRoundParameters);

            availableCommonSpawnPoints.Remove(chosenSpawnPoint);

            spawnedEnemies.Add(spawnedEnemy.GetShipDamageReceiver);
            spawnedEnemy.GetShipDamageReceiver.OnDeath += new OnLifeEvent(RemoveSpawnedEnemy);

            spawnedEnemy.SetDropParameters(dropParameters.GetEnemyDropParameters(enemyPoolTag));

            allSpawnedEnemies.Add(spawnedEnemy);

            if (rareEnemiesHighlightingType != HighlightingType.None)
            {
                spawnedEnemy.StartEnemyHighlighting(playerShip, rareEnemiesHighlightingType == HighlightingType.Important);
            }
            //if (!spawnedEnemiesArentHighlighted)
            //playerShip.StartEnemyHighlighting(spawnedEnemy);

            if (stopSpawnedEnemies)
            {
                spawnedEnemy.ShipMvt.InstantStopShip();
            }

            if (spawnedEnemiesAutoDetectPlayer)
            {
                spawnedEnemy.AutoDetectPlayer();
            }
        }
        #endregion

        if (cinematicToPlayOnWaveStart != null)
        {
            if (stopSpawnedEnemies)
            {
                cinematicToPlayOnWaveStart.PlayCinematic(allSpawnedEnemies);
            }
            else
            {
                cinematicToPlayOnWaveStart.PlayCinematic();
            }
        }
        else
        {
            if (stopSpawnedEnemies)
            {
                GameManager.gameManager.CinematicMng.SetShipsToStart(allSpawnedEnemies);
            }
        }

        //GameManager.gameManager.ShowDebugText(waveName + " started (after enemy spawn)");
        return(spawnedEnemies);
    }