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); } }