public PoolController GetPoolController(Fsm fsm, bool createIfNotFound) { PoolController poolCtrl = null; switch (from) { case FromType.Owner: if (fsm == null) { return(null); } if (fsm.Owner == null) { return(null); } poolCtrl = fsm.Owner.GetComponent <PoolController>(); if (!poolCtrl && createIfNotFound) { poolCtrl = fsm.Owner.gameObject.AddComponent <PoolController>(); } break; case FromType.GameObject: if (gameObject == null) { return(null); } if (gameObject.IsNone || gameObject.Value == null) { return(null); } poolCtrl = gameObject.Value.GetComponent <PoolController>(); if (!poolCtrl && createIfNotFound) { poolCtrl = gameObject.Value.AddComponent <PoolController>(); } break; case FromType.Group: if (groupName == null) { return(null); } if (groupName.IsNone || string.IsNullOrEmpty(groupName.Value)) { return(null); } poolCtrl = PoolController.GetPool(groupName.Value); if (!poolCtrl && createIfNotFound) { poolCtrl = PoolController.CreatePool(groupName.Value); } break; } return(poolCtrl); }
void GenerateInitialSpawns() { if (initialSpawnsAt != null) { var pool = PoolController.GetPool(data.poolGroup); for (int i = 0; i < initialSpawnsAt.Length && mSpawnedEntities.Count < data.maxSpawn; i++) { var pos = initialSpawnsAt[i].position; pos.z = 0f; Spawn(pool, pos, Quaternion.identity, null); } } }
IEnumerator DoSpawning() { var pool = PoolController.GetPool(data.poolGroup); var startDelay = UnityEngine.Random.Range(data.spawnStartDelayMin, data.spawnStartDelayMax); if (startDelay > 0f) { for (int i = 0; i < mListeners.Length; i++) { mListeners[i].OnSpawnStart(); } yield return(new WaitForSeconds(UnityEngine.Random.Range(data.spawnStartDelayMin, data.spawnStartDelayMax))); } while (mIsSpawning) { //spawn begin for (int i = 0; i < mListeners.Length; i++) { mListeners[i].OnSpawnBegin(); } //wait for spawn ready while (true) { int spawnReadyCount = 0; for (int i = 0; i < mListeners.Length; i++) { if (mListeners[i].OnSpawning()) { spawnReadyCount++; } } if (spawnReadyCount >= mListeners.Length) { break; } yield return(null); } //spawn var spawnPos = spawnAt ? spawnAt.position : transform.position; spawnPos.z = 0f; var spawnRot = data.spawnIgnoreRotation ? Quaternion.identity : spawnAt ? spawnAt.rotation : transform.rotation; Spawn(pool, spawnPos, spawnRot, mSpawnParms); //spawning finished? while (true) { int spawnFinishCount = 0; for (int i = 0; i < mListeners.Length; i++) { if (mListeners[i].OnSpawningFinish()) { spawnFinishCount++; } } if (spawnFinishCount >= mListeners.Length) { break; } yield return(null); } bool isFull = mSpawnedEntities.Count >= data.maxSpawn; if (isFull) { //spawn end for (int i = 0; i < mListeners.Length; i++) { mListeners[i].OnSpawnEnd(); } while (mSpawnedEntities.Count >= data.maxSpawn) { yield return(null); } //wait for a bit yield return(new WaitForSeconds(data.spawnFullDelay)); } else { //ready up again for (int i = 0; i < mListeners.Length; i++) { mListeners[i].OnSpawnReady(); } yield return(new WaitForSeconds(UnityEngine.Random.Range(data.spawnDelayMin, data.spawnDelayMax))); } } mSpawningRout = null; }