Exemplo n.º 1
0
    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();
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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);
            }
        }
    }