Example #1
0
        private ISpawner InstantiateSpawner(int amount, float delay, IContentPrefab prefab)
        {
            GameObject newSpawner = Instantiate(NestedSpawner);
            ISpawner   spawner    = newSpawner.GetComponent <ISpawner>();

            spawner.OnSpawn    += OnSpawnerSpawn;
            spawner.OnFinished += OnSpawnerFinished;
            spawner.Spawn(amount, delay, prefab);
            return(spawner);
        }
        private IEnumerator InternalSpawn(int amount, float delay, IContentPrefab prefab)
        {
            for (int i = 0; i < amount; i++)
            {
                OnSpawn?.Invoke(prefab.Instantiate());
                if (i != amount - 1)
                {
                    yield return(UnityUtils.WaitForFixedSeconds(delay));
                }
            }

            OnFinished?.Invoke();
            Destroy(gameObject);
        }
Example #3
0
        public void Spawn(int amount, float delay, IContentPrefab prefab)
        {
            float f         = 1f / delay;
            int   spawners  = Mathf.CeilToInt(f / FrequencyPerSpawner);
            float d         = delay * spawners;
            int   a         = Mathf.RoundToInt(amount / spawners);
            int   remaining = amount - (a * spawners);

            _totalSpawners = spawners;
            for (int i = 0; i < spawners; i++)
            {
                InstantiateSpawner(a, d, prefab);
            }

            // Dirty solution but of little consequence.
            if (remaining > 0)
            {
                _totalSpawners++;
                InstantiateSpawner(remaining, 1 / f / remaining, prefab);
            }
        }
 public void Spawn(int amount, float delay, IContentPrefab prefab)
 {
     StartCoroutine(InternalSpawn(amount, delay, prefab));
 }
Example #5
0
 public GameObjectPool(IContentPrefab prefab)
 {
     _prefab = prefab;
 }