コード例 #1
0
        private static string SelectEnemyToSpawn(SpawnData spawnData)
        {
            // Select enemy to spawn
            string enemyName;

            // Check if any of the arrays are empty (filled with 0's)
            bool isMeleeEmpty  = Array.TrueForAll(spawnData.MeleeData, data => data.spawnChance == 0);
            bool isRangedEmpty = Array.TrueForAll(spawnData.RangedData, data => data.spawnChance == 0);

            // If neither is empty, then randomly choose an enemy from either list
            if (!isMeleeEmpty && !isRangedEmpty)
            {
                enemyName = Random.Range(0, 2) == 0
                    ? FindSuitableMeleeEnemy(spawnData)
                    : FindSuitableRangedEnemy(spawnData);
            }
            else
            {
                // If melee is empty, then get an enemy from Ranged and viceversa.
                enemyName = isMeleeEmpty
                    ? FindSuitableRangedEnemy(spawnData)
                    : FindSuitableMeleeEnemy(spawnData);
            }
            return(enemyName);
        }
コード例 #2
0
        private static string GetRangedEnemyNameFromMovementProbability(SpawnData spawnData, EnemyType.RangedEnemyType enemyType)
        {
            RangedMovement rangedMovement = spawnData.RangedMovementProbability.rangedProbabilities.Find(movement =>
                                                                                                         movement.enemyType == enemyType);
            RangedEnemyTypeToNameContainer nameContainer =
                spawnData.NameContainer.rangedEnemyTypeToNameContainer.Find(container =>
                                                                            container.rangedEnemyType == enemyType);
            float  randomValue = Random.value;
            string enemyName   = randomValue < rangedMovement.rushChance ? nameContainer.rangedEnemyNames[0] : nameContainer.rangedEnemyNames[1];

            return(enemyName);
        }
コード例 #3
0
        /// <summary>
        /// Spawns enemies. It should spawn 1 enemy on each half of the screen at random positions, every X seconds (GameManager).
        /// </summary>
        public void SpawnEnemies(SpawnData spawnData)
        {
            int randomSpawns = Random.Range(1, 1);

            for (int i = 0; i < randomSpawns; i++)
            {
                // Choose enemy
                string topEnemy    = SelectEnemyToSpawn(spawnData);
                string bottomEnemy = SelectEnemyToSpawn(spawnData);
                // Spawn the enemies
                SpawnEnemy(topEnemy, SpawnEnemyTop);
                SpawnEnemy(bottomEnemy, SpawnEnemyBottom);
            }
        }
コード例 #4
0
        private static string FindSuitableRangedEnemy(SpawnData spawnData)
        {
            bool   foundSuitableEnemy = false;
            string enemyName          = "";

            while (!foundSuitableEnemy)
            {
                int randomIndex = Random.Range(0, spawnData.RangedData.Length);
                if (spawnData.RangedData[randomIndex].spawnChance > 0)
                {
                    enemyName          = GetRangedEnemyNameFromMovementProbability(spawnData, spawnData.RangedData[randomIndex].enemyType);
                    foundSuitableEnemy = true;
                }
            }
            return(enemyName);
        }
コード例 #5
0
        private static string GetMeleeEnemyNameFromMovementProbability(SpawnData spawnData, EnemyType.MeleeEnemyType enemyType)
        {
            string        enemyName;
            MeleeMovement meleeMovement = spawnData.MeleeMovementProbability.meleeProbabilities.Find(movement =>
                                                                                                     movement.enemyType == enemyType);
            MeleeEnemyTypeToNameContainer nameContainer =
                spawnData.NameContainer.meleeEnemyTypeToNameContainer.Find(container =>
                                                                           container.meleeEnemyType == enemyType);
            float randomValue = Random.value;

            if (randomValue < meleeMovement.rushChance)
            {
                // Rushing enemy
                enemyName = nameContainer.meleeEnemyNames[0];
            }
            else
            {
                float increment = meleeMovement.flankChance + meleeMovement.rushChance;
                enemyName = randomValue < increment ? nameContainer.meleeEnemyNames[1] : nameContainer.meleeEnemyNames[2];
            }
            return(enemyName);
        }
コード例 #6
0
 private void GetSpawnDataFromDifficulty()
 {
     MeleeEnemySpawnData[]  meleeSpawnData  = meleeDifficulty.meleeDifficultyLevels[difficultyLevel].meleeEnemySpawnData;
     RangedEnemySpawnData[] rangedSpawnData = rangedDifficulty.rangedDifficultyLevels[difficultyLevel].rangedEnemySpawnData;
     _spawnData = new SpawnData(meleeSpawnData, rangedSpawnData, meleeMovementProbability, rangedMovementProbability, enemyNamesContainer);
 }