예제 #1
0
        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;
                }
            }
        }
예제 #2
0
    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();
         }
     }
 }
예제 #4
0
파일: Logger.cs 프로젝트: Yortw/ScribeSharp
        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;
                }
            }
        }