public override void Update(float elapsedSeconds, float totalSeconds) { if (!IsRunning) { return; } elapsedSecondsSinceStart += elapsedSeconds; if (elapsedSecondsSinceStart >= delay) { float withoutDelay = elapsedSecondsSinceStart - delay; float inAnimation = withoutDelay / duration; inAnimation = easingFunction?.Invoke(inAnimation) ?? inAnimation; onTick(MathHelper.Lerp(start, end, inAnimation)); if (withoutDelay >= duration) { if (!IsLooping) { IsFinished = true; OnFinished?.Invoke(); // we allow to reset it if (IsFinished) { poolItem.Dispose(); } } delay = 0; elapsedSecondsSinceStart -= duration; } } }
public void DeregisterPooledObject(string objectId) { // assert that a pool with this id exists if (!_objectPool.ContainsKey(objectId)) { CustomLogger.Error(nameof(PooledObjectManager), $"Does not contain entry with id {objectId}!"); return; } // despawn all currently active pooled objects List <PooledObject> objsToRemove = new List <PooledObject>(); for (int i = 0; i < _objectPool[objectId].InUseObjects.Count; i++) { PooledObject pooledObject = _objectPool[objectId].InUseObjects[i]; pooledObject.Despawn(); pooledObject.Dispose(); objsToRemove.Add(pooledObject); } _objectPool[objectId].AvailableObjects.AddRange(objsToRemove); // remove all existing pooled objects foreach (PooledObject pooledObject in _objectPool[objectId].AvailableObjects) { GameObject go = _objectPool[objectId].GameObjects[pooledObject]; Destroy(go); } _objectPool.Remove(objectId); }
private void CleanUpInteractables() { for (int i = 0; i < _interactables.Count; i++) { _interactables[i].SetInteractable(false); PooledObject pooledObject = _interactables[i] as PooledObject; if (pooledObject != null) { pooledObject.Despawn(); pooledObject.Dispose(); } } }
public void WriteEventWithSource(LogEvent logEvent, #if SUPPORTS_CALLERATTRIBUTES [System.Runtime.CompilerServices.CallerFilePath] #endif string source = null, #if SUPPORTS_CALLERATTRIBUTES [System.Runtime.CompilerServices.CallerMemberName] #endif string sourceMethod = null, #if SUPPORTS_CALLERATTRIBUTES [System.Runtime.CompilerServices.CallerLineNumber] #endif int sourceLineNumber = -1, bool cloneEvent = false) { if (logEvent == null) { throw new ArgumentNullException(nameof(logEvent)); } try { if (!IsEnabled || !(_FirstChanceFilter?.ShouldLog(logEvent.EventName, logEvent.EventSeverity, logEvent.EventType, logEvent.Source, logEvent.SourceMethod) ?? true)) { return; } LogEvent eventToWrite = logEvent; PooledObject <LogEvent> pooledLogEvent = null; try { if (cloneEvent) { pooledLogEvent = _EntryPool.Take(); logEvent.Clone(pooledLogEvent.Value); eventToWrite = pooledLogEvent.Value; } if (eventToWrite.DateTime == DateTimeOffset.MinValue) { eventToWrite.DateTime = _LogClock.Now; } UnsafeWriteEvent(eventToWrite, source, sourceMethod, sourceLineNumber); } finally { if (cloneEvent && pooledLogEvent != null) { pooledLogEvent.Dispose(); } } } catch (LogException lex) { if (_ErrorHandler.ReportError(lex) == LoggingErrorPolicy.Rethrow) { throw; } } catch (Exception ex) when(!ex.ShouldRethrowImmediately()) { var wrappedException = new LogException(ex.Message, ex); if (_ErrorHandler.ReportError(wrappedException) == LoggingErrorPolicy.Rethrow) { throw wrappedException; } } }