Пример #1
0
 public static void InvokeRepeating(Action _method, float _time, float _repeatRate)
 {
     invokeCollection[_method] = new InvokeItemMetadata()
     {
         timeSinceLastInvoke = 0f,
         invokeAfter         = _time,
         repeatRate          = _repeatRate
     };
 }
Пример #2
0
        private static void ManageActiveInvokes()
        {
            float _dt = (DateTime.Now - timeWhenLastEditorUpdateWasCalled).Milliseconds / 1000f;

            List <Action> _actionList = new List <Action>(invokeCollection.Keys);

            foreach (Action _action in _actionList)
            {
                InvokeItemMetadata _metadata = invokeCollection[_action];

                _metadata.timeSinceLastInvoke += _dt;

                if (_metadata.timeSinceLastInvoke > _metadata.invokeAfter)
                {
                    _action();

                    // Check whether invoke action can be invalidated
                    if (Mathf.Approximately(0f, _metadata.repeatRate))
                    {
                        invalidActions.Add(_action);
                        continue;
                    }

                    // Update item information
                    _metadata.timeSinceLastInvoke = 0f;
                    _metadata.invokeAfter         = _metadata.repeatRate;
                }
            }

            // Reset properties
            foreach (Action _action in invalidActions)
            {
                invokeCollection.Remove(_action);
            }

            invalidActions.Clear();
            timeWhenLastEditorUpdateWasCalled = DateTime.Now;
        }