Пример #1
0
    private IEnumerator Spawn(float p_delayTime, List <AIUnit> p_inactiveUnits, BSPRoom p_bspRoom)
    {
        yield return(new WaitForSeconds(p_delayTime));

        List <Node> emptyNodes = _tilemapReader.GetEmptyNode();

        if (emptyNodes != null && emptyNodes.Count > 0)
        {
            int randomSpawnUnit = Random.Range(0, 3);

            for (int i = 0; i < randomSpawnUnit; i++)
            {
                if (p_inactiveUnits.Count > 0)
                {
                    AIUnit unit       = p_inactiveUnits[0];
                    Node   randomNode = emptyNodes[Random.Range(0, emptyNodes.Count)];

                    int randomXIndex = Random.Range(0, Mathf.RoundToInt(p_bspRoom.spaceRect.width));
                    int randomYIndex = Random.Range(0, Mathf.RoundToInt(p_bspRoom.spaceRect.height));

                    unit.transform.position = new Vector2(randomXIndex + p_bspRoom.spaceRect.x, randomYIndex + p_bspRoom.spaceRect.y);
                    unit.gameObject.SetActive(true);
                    unit.SetUp(waveIndex.ToString(), projectileHolder, player.transform);
                    unit.OnDestroy += OnAIUnitDestroy;

                    total_aiUnit.Add(unit);

                    p_inactiveUnits.RemoveAt(0);
                }
            }
        }

        float randomDelayTime = Random.Range(0.3f, 3f);

        if (p_inactiveUnits.Count > 0)
        {
            StartCoroutine(Spawn(randomDelayTime, p_inactiveUnits, p_bspRoom));
        }
    }