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); }
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)); }
public GameObjectPool(IContentPrefab prefab) { _prefab = prefab; }