public static void SignalOnSpawnedNotification(ISpawner spawnPoint, ISpawnFactory factory, GameObject spawnedObject, IList <ISpawnerModifier> modifiers) { var spawnNotif = SpawnPointTriggeredNotification.Create(factory, spawnedObject, spawnPoint); if (modifiers != null && modifiers.Count > 0) { for (int i = 0; i < modifiers.Count; i++) { if (modifiers[i] != null) { modifiers[i].OnSpawnedNotification(spawnNotif); } } } Notification.PostNotification <SpawnPointTriggeredNotification>(spawnPoint, spawnNotif, false); Notification.Release(spawnNotif); }
internal void PlaceOnSpawn(ISpawner spawnPoint, ISpawnFactory spawnPool, GameObject spawnedObject) { if (_busy) { return; } if (this.FlagBusyOnSpawn) { _busy = true; } spawnedObject.transform.position = this.transform.position; spawnedObject.transform.rotation = this.transform.rotation; var n = SpawnPointTriggeredNotification.Create(spawnPool, spawnedObject, spawnPoint); Notification.PostNotification <SpawnPointTriggeredNotification>(this, n, false); Notification.Release(n); }
public SpawnedObjectController SpawnAsController(GameObject prefab, Vector3 pos, Quaternion rot, Transform par = null, System.Action <GameObject> initializeProperties = null) { if (_spawnPoint == null) { throw new System.InvalidOperationException("SpawnerMechanism must be initialized before calling Spawn."); } if (!_active) { return(null); } if (prefab == null) { return(null); } /* * using (var modifiers = TempCollection.GetList<ISpawnerModifier>()) * { * SpawnPointHelper.GetSpawnModifiers(_spawnPoint, modifiers); * * if(SpawnPointHelper.SignalOnBeforeSpawnNotification(_spawnPoint, prefab, modifiers)) * { * return null; * } * * //perform actual spawn * var controller = this.SpawnPool.SpawnAsController(prefab, pos, rot, par, initializeProperties, _spawnPoint); * if (controller == null) return null; * _spawnedObjects.Add(controller); * _totalCount++; * //end actual spawn * * SpawnPointHelper.SignalOnSpawnedNotification(_spawnPoint, this.SpawnPool, controller.gameObject, modifiers); * * return controller; * } */ //on before spawn var beforeNotif = SpawnPointBeforeSpawnNotification.Create(_spawnPoint, prefab); if (_modifiers != null && _modifiers.Count > 0) { var e = _modifiers.GetEnumerator(); while (e.MoveNext()) { e.Current.OnBeforeSpawnNotification(beforeNotif); } } Notification.PostNotification <SpawnPointBeforeSpawnNotification>(_spawnPoint, beforeNotif, false); Notification.Release(beforeNotif); if (beforeNotif.Cancelled) { return(null); } //perform actual spawn var controller = this.SpawnPool.SpawnAsController(prefab, pos, rot, par, initializeProperties, _spawnPoint); if (controller == null) { return(null); } _spawnedObjects.Add(controller); _totalCount++; //end actual spawn //on post spawn var spawnNotif = SpawnPointTriggeredNotification.Create(this.SpawnPool, controller.gameObject, _spawnPoint); if (_modifiers != null && _modifiers.Count > 0) { var e = _modifiers.GetEnumerator(); while (e.MoveNext()) { e.Current.OnSpawnedNotification(spawnNotif); } } Notification.PostNotification <SpawnPointTriggeredNotification>(_spawnPoint, spawnNotif, false); Notification.Release(spawnNotif); return(controller); }