Exemplo n.º 1
0
        private static int CurrentInsertAt()
        {
            if (ReorderableWidget.draggingReorderable < 0)
            {
                return(-1);
            }
            int groupID = ReorderableWidget.reorderables[ReorderableWidget.draggingReorderable].groupID;

            if (groupID < 0 || groupID >= ReorderableWidget.groups.Count)
            {
                Log.ErrorOnce("Reorderable used invalid group.", 1968375560);
                return(-1);
            }
            int num  = -1;
            int num2 = -1;

            for (int i = 0; i < ReorderableWidget.reorderables.Count; i++)
            {
                ReorderableWidget.ReorderableInstance reorderableInstance = ReorderableWidget.reorderables[i];
                if (reorderableInstance.groupID == groupID)
                {
                    int  num3 = (i > ReorderableWidget.draggingReorderable) ? num2 : i;
                    Rect rect = reorderableInstance.absRect.TopHalf();
                    if (rect.yMin > 0f)
                    {
                        rect.yMin = 0f;
                    }
                    if (rect.Contains(Event.current.mousePosition))
                    {
                        num = num3;
                        break;
                    }
                    if (num2 >= 0)
                    {
                        float num4  = Mathf.Min(reorderableInstance.absRect.x, ReorderableWidget.reorderables[num2].absRect.x);
                        Rect  rect2 = new Rect(num4, ReorderableWidget.reorderables[num2].absRect.center.y, Mathf.Max(reorderableInstance.absRect.xMax, ReorderableWidget.reorderables[num2].absRect.xMax) - num4, reorderableInstance.absRect.center.y - ReorderableWidget.reorderables[num2].absRect.center.y);
                        if (rect2.Contains(Event.current.mousePosition))
                        {
                            num = num3;
                            break;
                        }
                    }
                    num2 = i;
                }
            }
            if (num < 0 && num2 >= 0)
            {
                Rect rect3 = ReorderableWidget.reorderables[num2].absRect.BottomHalf();
                if (rect3.yMax < (float)UI.screenHeight)
                {
                    rect3.yMax = (float)UI.screenHeight;
                }
                if (rect3.Contains(Event.current.mousePosition))
                {
                    num = num2;
                }
            }
            return(num);
        }
Exemplo n.º 2
0
 public static bool Reorderable(int groupID, Rect rect)
 {
     if (Event.current.type == EventType.Repaint)
     {
         ReorderableWidget.ReorderableInstance item = default(ReorderableWidget.ReorderableInstance);
         item.groupID = groupID;
         item.rect    = rect;
         item.absRect = new Rect(UI.GUIToScreenPoint(rect.position), rect.size);
         ReorderableWidget.reorderables.Add(item);
         int num = ReorderableWidget.reorderables.Count - 1;
         if (ReorderableWidget.draggingReorderable != -1 && Vector2.Distance(ReorderableWidget.clickedAt, Event.current.mousePosition) > 5f)
         {
             if (!ReorderableWidget.dragBegun)
             {
                 SoundDefOf.TickTiny.PlayOneShotOnCamera(null);
                 ReorderableWidget.dragBegun = true;
             }
             if (ReorderableWidget.draggingReorderable == num)
             {
                 GUI.color = ReorderableWidget.HighlightColor;
                 Widgets.DrawHighlight(rect);
                 GUI.color = Color.white;
             }
             if (ReorderableWidget.lastInsertAt == num)
             {
                 Rect rect2 = ReorderableWidget.reorderables[ReorderableWidget.lastInsertAt].rect;
                 bool flag  = Event.current.mousePosition.y < rect2.center.y;
                 GUI.color = ReorderableWidget.LineColor;
                 if (flag)
                 {
                     Widgets.DrawLine(rect2.position, new Vector2(rect2.x + rect2.width, rect2.y), ReorderableWidget.LineColor, 2f);
                 }
                 else
                 {
                     Widgets.DrawLine(new Vector2(rect2.x, rect2.yMax), new Vector2(rect2.x + rect2.width, rect2.yMax), ReorderableWidget.LineColor, 2f);
                 }
                 GUI.color = Color.white;
             }
         }
         return(ReorderableWidget.draggingReorderable == num && ReorderableWidget.dragBegun);
     }
     if (Event.current.rawType == EventType.MouseUp)
     {
         ReorderableWidget.released = true;
     }
     if (Event.current.type == EventType.MouseDown && Mouse.IsOver(rect))
     {
         ReorderableWidget.clicked       = true;
         ReorderableWidget.clickedAt     = Event.current.mousePosition;
         ReorderableWidget.clickedInRect = rect;
     }
     return(false);
 }
        private static int CurrentInsertNear(out bool toTheLeft)
        {
            toTheLeft = false;
            int result;

            if (ReorderableWidget.draggingReorderable < 0)
            {
                result = -1;
            }
            else
            {
                int groupID = ReorderableWidget.reorderables[ReorderableWidget.draggingReorderable].groupID;
                if (groupID < 0 || groupID >= ReorderableWidget.groups.Count)
                {
                    Log.ErrorOnce("Reorderable used invalid group.", 1968375560, false);
                    result = -1;
                }
                else
                {
                    int num = -1;
                    for (int i = 0; i < ReorderableWidget.reorderables.Count; i++)
                    {
                        ReorderableWidget.ReorderableInstance reorderableInstance = ReorderableWidget.reorderables[i];
                        if (reorderableInstance.groupID == groupID)
                        {
                            if (num == -1 || Event.current.mousePosition.DistanceToRect(reorderableInstance.absRect) < Event.current.mousePosition.DistanceToRect(ReorderableWidget.reorderables[num].absRect))
                            {
                                num = i;
                            }
                        }
                    }
                    if (num >= 0)
                    {
                        ReorderableWidget.ReorderableInstance reorderableInstance2 = ReorderableWidget.reorderables[num];
                        if (ReorderableWidget.groups[reorderableInstance2.groupID].direction == ReorderableDirection.Horizontal)
                        {
                            toTheLeft = (Event.current.mousePosition.x < reorderableInstance2.absRect.center.x);
                        }
                        else
                        {
                            toTheLeft = (Event.current.mousePosition.y < reorderableInstance2.absRect.center.y);
                        }
                    }
                    result = num;
                }
            }
            return(result);
        }
        public static bool Reorderable(int groupID, Rect rect, bool useRightButton = false)
        {
            bool result;

            if (Event.current.type == EventType.Repaint)
            {
                ReorderableWidget.ReorderableInstance item = default(ReorderableWidget.ReorderableInstance);
                item.groupID = groupID;
                item.rect    = rect;
                item.absRect = new Rect(UI.GUIToScreenPoint(rect.position), rect.size);
                ReorderableWidget.reorderables.Add(item);
                int num = ReorderableWidget.reorderables.Count - 1;
                if (ReorderableWidget.draggingReorderable != -1 && (ReorderableWidget.dragBegun || Vector2.Distance(ReorderableWidget.clickedAt, Event.current.mousePosition) > 5f))
                {
                    if (!ReorderableWidget.dragBegun)
                    {
                        SoundDefOf.Tick_Tiny.PlayOneShotOnCamera(null);
                        ReorderableWidget.dragBegun = true;
                    }
                    if (ReorderableWidget.draggingReorderable == num)
                    {
                        GUI.color = ReorderableWidget.HighlightColor;
                        Widgets.DrawHighlight(rect);
                        GUI.color = Color.white;
                    }
                    if (ReorderableWidget.lastInsertNear == num && groupID >= 0 && groupID < ReorderableWidget.groups.Count)
                    {
                        Rect rect2 = ReorderableWidget.reorderables[ReorderableWidget.lastInsertNear].rect;
                        ReorderableWidget.ReorderableGroup reorderableGroup = ReorderableWidget.groups[groupID];
                        if (reorderableGroup.DrawLineExactlyBetween)
                        {
                            if (reorderableGroup.direction == ReorderableDirection.Horizontal)
                            {
                                rect2.xMin -= reorderableGroup.drawLineExactlyBetween_space / 2f;
                                rect2.xMax += reorderableGroup.drawLineExactlyBetween_space / 2f;
                            }
                            else
                            {
                                rect2.yMin -= reorderableGroup.drawLineExactlyBetween_space / 2f;
                                rect2.yMax += reorderableGroup.drawLineExactlyBetween_space / 2f;
                            }
                        }
                        GUI.color = ReorderableWidget.LineColor;
                        if (reorderableGroup.direction == ReorderableDirection.Horizontal)
                        {
                            if (ReorderableWidget.lastInsertNearLeft)
                            {
                                Widgets.DrawLine(rect2.position, new Vector2(rect2.x, rect2.yMax), ReorderableWidget.LineColor, 2f);
                            }
                            else
                            {
                                Widgets.DrawLine(new Vector2(rect2.xMax, rect2.y), new Vector2(rect2.xMax, rect2.yMax), ReorderableWidget.LineColor, 2f);
                            }
                        }
                        else if (ReorderableWidget.lastInsertNearLeft)
                        {
                            Widgets.DrawLine(rect2.position, new Vector2(rect2.xMax, rect2.y), ReorderableWidget.LineColor, 2f);
                        }
                        else
                        {
                            Widgets.DrawLine(new Vector2(rect2.x, rect2.yMax), new Vector2(rect2.xMax, rect2.yMax), ReorderableWidget.LineColor, 2f);
                        }
                        GUI.color = Color.white;
                    }
                }
                result = (ReorderableWidget.draggingReorderable == num && ReorderableWidget.dragBegun);
            }
            else
            {
                if (Event.current.rawType == EventType.MouseUp)
                {
                    ReorderableWidget.released = true;
                }
                if (Event.current.type == EventType.MouseDown && ((useRightButton && Event.current.button == 1) || (!useRightButton && Event.current.button == 0)) && Mouse.IsOver(rect))
                {
                    ReorderableWidget.clicked       = true;
                    ReorderableWidget.clickedAt     = Event.current.mousePosition;
                    ReorderableWidget.clickedInRect = rect;
                }
                result = false;
            }
            return(result);
        }