/// <summary> /// Return an object to the pool. /// </summary> /// <param name="obj"></param> /// <returns>Returns true if the object was returned to the pool, false if destroyed.</returns> internal bool Despawn(SpawnedObjectController obj) { if (Object.ReferenceEquals(obj, null)) { throw new System.ArgumentNullException("obj"); } obj.BroadcastMessage(SPSpawnConstants.MSG_ONDESPAWN, SendMessageOptions.DontRequireReceiver); var n = DeSpawnNotification.Create(obj); Notification.PostNotification <DeSpawnNotification>(obj, n, false); Notification.PostNotification <DeSpawnNotification>(this, n, false); Notification.Release(n); var e = _registeredPrefabs.GetEnumerator(); while (e.MoveNext()) { if (e.Current.Contains(obj)) { e.Current.Despawn(obj); return(true); } } //if we reached here, it's not managed by this pool... destroy GameObject.Destroy(obj.gameObject); return(false); }
public SpawnPoolPurgedNotification(SpawnedObjectController controller) { if (controller == null) { throw new System.ArgumentNullException("controller"); } _controller = controller; _spawnedObject = controller.gameObject; }
internal void Purge(SpawnedObjectController obj) { if (_activeInstances.Contains(obj)) { _activeInstances.Remove(obj); } if (_instances.Contains(obj)) { _instances.Remove(obj); } }
internal bool Purge(SpawnedObjectController cntrl) { if (_activeInstances.Remove(cntrl)) { return(true); } if (_instances.Remove(cntrl)) { return(true); } return(false); }
private void SignalSpawned(SpawnedObjectController obj, ISpawner spawnPoint) { if (obj == null) { return; } var n = SpawnNotification.Create(this, obj.gameObject, spawnPoint); obj.gameObject.BroadcastMessage(SPSpawnConstants.MSG_ONSPAWN, n, SendMessageOptions.DontRequireReceiver); Notification.PostNotification(obj, n, false); Notification.PostNotification(this, n, false); Notification.Release(n); }
internal bool Despawn(SpawnedObjectController cntrl) { if (!_activeInstances.Remove(cntrl)) { return(false); } cntrl.SetDespawned(); cntrl.transform.parent = _owner.transform; cntrl.transform.localPosition = Vector3.zero; cntrl.transform.rotation = Quaternion.identity; _instances.Add(cntrl); return(true); }
internal void Despawn(SpawnedObjectController obj) { if (!_activeInstances.Contains(obj)) { return; } _activeInstances.Remove(obj); obj.SetDespawned(); obj.transform.parent = _owner.transform; obj.transform.localPosition = Vector3.zero; obj.transform.rotation = Quaternion.identity; _instances.Add(obj); }
public bool Purge(SpawnedObjectController cntrl) { if (object.ReferenceEquals(cntrl, null)) { throw new System.ArgumentNullException("cntrl"); } PrefabCache cache; if (!_prefabToCache.TryGetValue(cntrl.PrefabID, out cache) || !cache.Contains(cntrl)) { return(false); } return(cache.Purge(cntrl)); }
internal bool Despawn(SpawnedObjectController cntrl) { if (Object.ReferenceEquals(cntrl, null)) { throw new System.ArgumentNullException("cntrl"); } PrefabCache cache; if (!_prefabToCache.TryGetValue(cntrl.PrefabID, out cache) || !cache.ContainsActive(cntrl)) { return(false); } this.gameObject.Broadcast <IOnDespawnHandler, SpawnedObjectController>(cntrl, (o, c) => o.OnDespawn(c)); cntrl.gameObject.Broadcast <IOnDespawnHandler, SpawnedObjectController>(cntrl, (o, c) => o.OnDespawn(c)); return(cache.Despawn(cntrl)); }
public static SpawnPoolPurgedNotification Create(SpawnedObjectController controller) { if (controller == null) { throw new System.ArgumentNullException("controller"); } SpawnPoolPurgedNotification n; if (Notification.TryGetCache <SpawnPoolPurgedNotification>(out n)) { n._controller = controller; n._spawnedObject = controller.gameObject; } else { n = new SpawnPoolPurgedNotification(controller); } return(n); }
/// <summary> /// If a GameObject is being destroyed, this method will purge it from the SpawnPool. /// </summary> /// <param name="obj"></param> internal void Purge(SpawnedObjectController obj) { if (Object.ReferenceEquals(obj, null)) { throw new System.ArgumentNullException("obj"); } var n = SpawnPoolPurgedNotification.Create(obj); Notification.PostNotification <SpawnPoolPurgedNotification>(obj, n, false); Notification.PostNotification <SpawnPoolPurgedNotification>(this, n, false); Notification.Release(n); var e = _registeredPrefabs.GetEnumerator(); while (e.MoveNext()) { if (e.Current.Contains(obj)) { e.Current.Purge(obj); return; } } }
public bool Contains(SpawnedObjectController obj) { return(_instances.Contains(obj) || _activeInstances.Contains(obj)); }
internal bool ContainsActive(SpawnedObjectController cntrl) { return(_activeInstances.Contains(cntrl)); }
private void SignalSpawned(SpawnedObjectController cntrl) { this.gameObject.Broadcast <IOnSpawnHandler, SpawnedObjectController>(cntrl, (o, c) => o.OnSpawn(c)); cntrl.gameObject.Broadcast <IOnSpawnHandler, SpawnedObjectController>(cntrl, (o, c) => o.OnSpawn(c)); }