private static void MoveWorkOrderToEnd(TaskManagementWidget taskManagementWidget, TaskManagementElement workOrder, End placement) { var widgetTraversed = Traverse.Create(taskManagementWidget); var tasks = widgetTraversed.Field("allMechElements").GetValue <List <TaskManagementElement> >(); var workOrders = widgetTraversed.Field("mechLabQueue").GetValue <List <WorkOrderEntry> >(); var initialIndex = tasks.IndexOf(workOrder); int newIndex; if (placement == End.Top) { if (initialIndex == 0) { return; } newIndex = 0; } else { if (initialIndex >= tasks.Count) { return; } newIndex = tasks.Count - 1; } tasks.Remove(workOrder); tasks.Insert(newIndex, workOrder); workOrders.Remove(workOrder.Entry); workOrders.Insert(newIndex, workOrder.Entry); workOrder.transform.SetSiblingIndex(newIndex); }
private static void OrderAndConvertTaskManagementEntriesToWorkOrderEntries(TaskManagementWidget taskManagementWidget, Order order) { var widgetTraversed = Traverse.Create(taskManagementWidget); var tasks = widgetTraversed.Field("allMechElements").GetValue <List <TaskManagementElement> >(); var sortedWorkOrders = tasks .OrderBy(x => order == Order.Descending ? -x.cumulativeDaysRemaining : x.cumulativeDaysRemaining) .ThenBy(x => x.Entry.GUID) .Select(x => x.Entry) .ToList(); var sim = widgetTraversed.Field("Sim").GetValue <SimGameState>(); var closeCb = widgetTraversed.Field("closeCallback").GetValue <UnityAction>(); Traverse.Create(sim).Property("MechLabQueue").SetValue(sortedWorkOrders); taskManagementWidget.SetData(sim, closeCb); }
public static bool Prefix(TaskManagementElement element, TaskManagementWidget __instance, ref bool ___modified) { var state = State.GetState(); if (state.IsNothing) { return(true); } else if (state.IsSorting) { Sorter.SortWorkOrdersDescending(taskManagementWidget: __instance); } else if (state.IsMoving) { Mover.MoveWorkOrderToBottom(taskManagementWidget: __instance, workOrder: element); } ___modified = true; return(false); }
public static bool Prefix(TaskManagementElement element, TaskManagementWidget __instance) { var shiftHeld = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift); var magicThis = Traverse.Create(__instance); var mechElements = magicThis.Field("allMechElements").GetValue <List <TaskManagementElement> >(); var initialIndex = mechElements.IndexOf(element); if (initialIndex >= mechElements.Count) { return(false); } var mechLabQueue = magicThis.Field("mechLabQueue").GetValue <List <WorkOrderEntry> >(); var newIndex = shiftHeld ? mechElements.Count - 1 : initialIndex + 1; mechElements.Remove(element); mechElements.Insert(newIndex, element); mechLabQueue.Remove(element.Entry); mechLabQueue.Insert(newIndex, element.Entry); element.transform.SetSiblingIndex(newIndex); magicThis.Field("modified").SetValue(true); return(false); }
public static void SortWorkOrdersAscending(TaskManagementWidget taskManagementWidget) { OrderAndConvertTaskManagementEntriesToWorkOrderEntries(taskManagementWidget, Order.Ascending); }
public static void MoveWorkOrderToTop(TaskManagementWidget taskManagementWidget, TaskManagementElement workOrder) { MoveWorkOrderToEnd(taskManagementWidget, workOrder, End.Top); }
public static void MoveWorkOrderToBottom(TaskManagementWidget taskManagementWidget, TaskManagementElement workOrder) { MoveWorkOrderToEnd(taskManagementWidget, workOrder, End.Bottom); }