Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
 public static void SortWorkOrdersAscending(TaskManagementWidget taskManagementWidget)
 {
     OrderAndConvertTaskManagementEntriesToWorkOrderEntries(taskManagementWidget, Order.Ascending);
 }
Esempio n. 6
0
 public static void MoveWorkOrderToTop(TaskManagementWidget taskManagementWidget, TaskManagementElement workOrder)
 {
     MoveWorkOrderToEnd(taskManagementWidget, workOrder, End.Top);
 }
Esempio n. 7
0
 public static void MoveWorkOrderToBottom(TaskManagementWidget taskManagementWidget, TaskManagementElement workOrder)
 {
     MoveWorkOrderToEnd(taskManagementWidget, workOrder, End.Bottom);
 }