예제 #1
0
    OpponentBase GetRandomOpponent()
    {
        int random            = Random.Range(0, 101);
        int spawnOpponentType = 0;

        for (int i = 0; i < opponentPrefabProbIndex.Length; i++)
        {
            if (random < opponentPrefabProbIndex[i])
            {
                spawnOpponentType = i;
                break;
            }
        }

        if (opponentPools[spawnOpponentType].Count > 0)
        {
            return(opponentPools[spawnOpponentType].Dequeue());
        }
        else
        {
            OpponentBase opponent = Instantiate(opponentPrefabs[spawnOpponentType]);
            opponent.transform.parent = spawnsParent;
            return(opponent);
        }
    }
예제 #2
0
    void SpawnRandomOpponent(Vector3 pos)
    {
        OpponentBase opponent = GetRandomOpponent();

        opponent.gameObject.SetActive(true);
        opponent.transform.position = pos;
        opponent.Setup();
        activeOpponents.Add(opponent);
    }
예제 #3
0
    public void FreeOpponent(OpponentBase opponent)
    {
        int opponentType = 0;

        for (int i = 0; i < opponentPrefabs.Length; i++)
        {
            if (opponentPrefabs[i].GetType() == opponent.GetType())
            {
                opponentType = i;
                break;
            }
        }

        opponent.gameObject.SetActive(false);
        opponentPools[opponentType].Enqueue(opponent);
        activeOpponents.Remove(opponent);
    }
예제 #4
0
    void FillOpponentPools()
    {
        opponentPools = new List <Queue <OpponentBase> >();

        for (int i = 0; i < opponentPrefabs.Length; i++)
        {
            opponentPools.Add(new Queue <OpponentBase>());

            for (int j = 0; j < initialOpponentPoolSize; j++)
            {
                OpponentBase newOpp = Instantiate(opponentPrefabs[i]);
                newOpp.gameObject.SetActive(false);
                newOpp.transform.parent = spawnsParent;
                opponentPools[i].Enqueue(newOpp);
            }
        }
    }