Example #1
0
    private void UpdateSpawners()
    {
        if (m_spawners.Count == 0 || m_gifts.Count == 0)
        {
            return;
        }

        m_timeSinceStart += Time.deltaTime;

        int spawned     = (int)((m_timeSinceStart - Time.deltaTime) / m_spawnInterval);
        int toBeSpawned = (int)((m_timeSinceStart) / m_spawnInterval);

        for (int i = 0; i < toBeSpawned - spawned; ++i)
        {
            int selectedSpawner = Random.Range(0, m_spawners.Count);
            int selectedGift    = Random.Range(0, m_gifts.Count);

            Vector3 giftPosition = new Vector3(m_spawners[selectedSpawner].transform.position.x,
                                               m_spawners[selectedSpawner].transform.position.y,
                                               m_gifts[selectedGift].transform.position.z);



            GameObject giftObject = Instantiate(m_gifts[selectedGift], giftPosition, Quaternion.identity);
            Gift       gift       = giftObject.GetComponent <Gift>();
            if (!gift)
            {
                continue;
            }

            if (!gift.IsPlaceFree(gift.transform.position, true))
            {
                Destroy(gift.gameObject);
                break;
            }

            gift.m_prevNode = m_spawners[selectedSpawner];

            List <PathNode> links = m_spawners[selectedSpawner].getLinks();
            if (links.Count == 0)
            {
                continue;
            }

            gift.m_nextNode = links[0];

            gift.m_event = new GiftReceivedEvent();
            gift.m_event.AddListener(OnGiftReceived);
        }
    }