public void RenderEveryTick() { HashSet <int> hashSet = pendingDirtyTransforms; pendingDirtyTransforms = dirtyTransforms; dirtyTransforms = hashSet; pendingDirtyTransforms.Clear(); previouslyMovingTransforms.Clear(); hashSet = previouslyMovingTransforms; previouslyMovingTransforms = movingTransforms; movingTransforms = hashSet; foreach (int dirtyTransform in dirtyTransforms) { CellChangedEntry value = default(CellChangedEntry); if (cellChangedHandlers.TryGetValue(dirtyTransform, out value)) { if ((UnityEngine.Object)value.transform == (UnityEngine.Object)null) { continue; } int value2 = -1; transformLastKnownCell.TryGetValue(dirtyTransform, out value2); int num = PosToCell(value.transform.GetPosition()); if (value2 != num) { cellChangedCallbacksToRun.Clear(); cellChangedCallbacksToRun.AddRange(value.handlers); foreach (CellChangedEntry.Handler item in cellChangedCallbacksToRun) { CellChangedEntry.Handler current2 = item; foreach (CellChangedEntry.Handler handler in value.handlers) { CellChangedEntry.Handler current3 = handler; if (current3.callback == current2.callback) { current3.callback(); break; } } } transformLastKnownCell[dirtyTransform] = num; } } movingTransforms.Add(dirtyTransform); if (!previouslyMovingTransforms.Contains(dirtyTransform)) { RunMovementStateChangedCallbacks(dirtyTransform, true); } } foreach (int previouslyMovingTransform in previouslyMovingTransforms) { if (!movingTransforms.Contains(previouslyMovingTransform)) { RunMovementStateChangedCallbacks(previouslyMovingTransform, false); } } dirtyTransforms.Clear(); }
public int RegisterCellChangedHandler(Transform transform, System.Action callback, string debug_name) { int instanceID = transform.GetInstanceID(); CellChangedEntry value = default(CellChangedEntry); if (!cellChangedHandlers.TryGetValue(instanceID, out value)) { value = default(CellChangedEntry); value.transform = transform; value.handlers = new List <CellChangedEntry.Handler>(); } CellChangedEntry.Handler handler = default(CellChangedEntry.Handler); handler.name = debug_name; handler.callback = callback; CellChangedEntry.Handler item = handler; value.handlers.Add(item); cellChangedHandlers[instanceID] = value; return(instanceID); }
public void UnregisterCellChangedHandler(int instance_id, System.Action callback) { CellChangedEntry value = default(CellChangedEntry); if (cellChangedHandlers.TryGetValue(instance_id, out value)) { for (int i = 0; i < value.handlers.Count; i++) { CellChangedEntry.Handler handler = value.handlers[i]; if (!(handler.callback != callback)) { value.handlers.RemoveAt(i); break; } } if (value.handlers.Count == 0) { cellChangedHandlers.Remove(instance_id); } } }