Пример #1
0
    public EnemyData[] GetAvailableEnemies(WaveData _waveData)
    {
        EnemyDatas i_totalEnemies = enemyDatas;
        int        enemyCount     = i_totalEnemies.enemyDatas.Count - _waveData.currentEnemies.Count;

        if (enemyCount <= 0)
        {
            return(new EnemyData[0]);
        }
        EnemyData[]      i_availableEnemiesList   = new EnemyData[enemyCount];
        List <EnemyData> i_unavailableEnemiesList = new List <EnemyData>();

        foreach (WaveEnemy wep in _waveData.currentEnemies)
        {
            i_unavailableEnemiesList.Add(wep.enemyType);
        }
        int index = 0;

        for (int i = 0; i < i_totalEnemies.enemyDatas.Count; i++)
        {
            if (IsEnemyAvailable(i_totalEnemies.enemyDatas[i], i_unavailableEnemiesList) && index <= enemyCount)
            {
                i_availableEnemiesList[index] = i_totalEnemies.enemyDatas[i];
                index++;
            }
        }
        return(i_availableEnemiesList);
    }
Пример #2
0
    public static List <Enemy> GetListEnemyPrefab(int level_total, int minLevel, int maxLevel)
    {
        List <EnemyDatas> listEnable = new List <EnemyDatas>();
        int total_Uutien             = 0;

        // Lấy danh sách có thể có Enemy
        foreach (EnemyDatas le in _EnemyDatas)
        {
            if (le.inGroup(MAP_GamePlay.CodeEnemyCurrent) && le.type == TypeEnemy.Normal && le.Level <= maxLevel && le.Level >= minLevel)
            {
                listEnable.Add(le);
                total_Uutien += le.Priority;
            }
        }
        if (listEnable.Count == 0)
        {
            Debug.Log("Data không hợp lệ");
            return(null);
        }
        // Sắp xếp
        for (int i = 0; i < listEnable.Count - 1; i++)
        {
            for (int j = i + 1; j < listEnable.Count; j++)
            {
                if (listEnable[j].Priority < listEnable[i].Priority)
                {
                    EnemyDatas a = listEnable[i];
                    listEnable[i] = listEnable[j];
                    listEnable[j] = a;
                }
            }
        }
        // Tao danh sach Enemy
        List <Enemy> listEnemy = new List <Enemy>();
        int          MaxEnemy  = 50;

        do
        {
            int        a  = UnityEngine.Random.Range(1, total_Uutien + 1);
            EnemyDatas le = GetEnemy(listEnable, a);
            level_total -= le.Level;
            if (level_total < 0)
            {
                break;
            }
            listEnemy.Add(le.GetEnemy);
            MaxEnemy++;
        } while (true || MaxEnemy >= 50);
        return(listEnemy);
    }
Пример #3
0
    public void InstantiateEnemy(WaveEnemy _enemy)
    {
        if (_enemy.spawnIndexes.Count <= 0)
        {
            Debug.LogWarning("Can't spawn enemy: no spawn assigned"); return;
        }
        int i_chosenSpawnerIndex = Random.Range(0, _enemy.spawnIndexes.Count);

        i_chosenSpawnerIndex = _enemy.spawnIndexes[i_chosenSpawnerIndex];
        GameObject i_spawner = spawnList[i_chosenSpawnerIndex].transform.gameObject;

        Spawner i_spawnerScript = i_spawner.GetComponent <Spawner>();

        if (i_spawnerScript != null && !i_spawnerScript.IsFree())
        {
            return;
        }

        //A custom spawner is assigned, it can be used to spawn enemy
        if (i_spawnerScript != null)
        {
            if (!i_spawnerScript.IsFree())
            {
                return;
            }
            EnemyBehaviour spawnedEnemy = i_spawnerScript.SpawnEnemy(EnemyDatas.GetEnemyDatas().GetEnemyByID(_enemy.enemyType.name), true);
            RegisterEnemy(spawnedEnemy);
        }

        //No custom spawner found, it'll spawn the enemy instantly on the assigned position
        else
        {
            GameObject     i_newEnemy       = Instantiate(_enemy.enemyType.prefab).gameObject;
            EnemyBehaviour i_enemyBehaviour = i_newEnemy.GetComponent <EnemyBehaviour>();
            if (i_enemyBehaviour == null)
            {
                Destroy(i_newEnemy); Debug.LogWarning("Wave can't instantiate enemy: invalid prefab"); return;
            }
            if (i_enemyBehaviour.GetNavMesh() != null)
            {
                i_enemyBehaviour.GetNavMesh().enabled = false;
            }
            i_newEnemy.transform.position = spawnList[i_chosenSpawnerIndex].transform.position;
            i_enemyBehaviour.GetNavMesh().enabled = true;
            RegisterEnemy(i_enemyBehaviour);
        }
        UpdateCurrentPowerLevel();
        nextEnemyToSpawn = null;
    }
Пример #4
0
    private void OnEnable()
    {
        waveEditor        = (WaveController)target;
        enemyDatas        = Resources.Load <EnemyDatas>("EnemyDatas");
        availableSpawners = GetAvailableSpawners();

        //Generates dictionaries
        enemyFoldoutIndex = new Dictionary <WaveData, int>();
        enemyAvailable    = new Dictionary <WaveData, EnemyData[]>();

        //Fill dictionaries;
        foreach (WaveData wave in waveEditor.waveList)
        {
            enemyFoldoutIndex.Add(wave, 0);
            enemyAvailable.Add(wave, new EnemyData[0]);
            UpdateAvailableEnemies(wave);
        }
    }