public static void InvokeRepeating(Action _method, float _time, float _repeatRate) { invokeCollection[_method] = new InvokeItemMetadata() { timeSinceLastInvoke = 0f, invokeAfter = _time, repeatRate = _repeatRate }; }
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; }