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); }
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); }