Esempio n. 1
0
        public override void OnFixedUpdate()
        {
            foreach (RepairData repairData in repairDatas)
            {
                CustomPRCData cPRCD = repairData.customControllerData as CustomPRCData;

                bool foundNulls = false;
                foreach (IRepairParticipant repairParticipant in cPRCD.assignedParticipants)
                {
                    if (repairParticipant == null)
                    {
                        foundNulls = true;
                    }
                    else
                    {
                        // TODO: repair progress handling
                    }
                }

                if (foundNulls)
                {
                    cPRCD.assignedParticipants.RemoveAll((IRepairParticipant a) => a == null);
                }
            }
        }
Esempio n. 2
0
        void StartRepairAssignment(RepairData repairData, CustomPRCData customPRCData)
        {
            customPRCData.PAWCatchingAssignmentButton.guiName = $"Stop Assigning: {repairData.RepairOptionDescription}";
            repairsCatchingAssignments.Add(repairData);

            customPRCData.PAWCutAssignmentsButton = new BaseEvent(Events, $"CutAssignmentsFor {repairData.RepairOptionDescription}",
                                                                  () => CutRepairAssignments(repairData), GenerateCutAssignmentsAttribs(repairData));

            participantsCatchingAssignments.RemoveAll((IRepairParticipant a) => a == null);
            foreach (IRepairParticipant assigningRepairParticipant in participantsCatchingAssignments)
            {
                PerformAssignment(assigningRepairParticipant, repairData);
            }
        }
Esempio n. 3
0
        void DeselectRepair(RepairData repairData)      // Does not call repairData.Deselect, supposed to be used after/before calling it or Toggle somewhere else
        {
            CustomPRCData cPRCD = (repairData.customControllerData as CustomPRCData);

            cPRCD.PAWSelectionToggleButton.guiName = $"Select: {repairData.RepairOptionDescription}";

            Events.Remove(cPRCD.PAWCatchingAssignmentButton);
            part.Events.Remove(cPRCD.PAWCatchingAssignmentButton);
            part.PartActionWindow.displayDirty = true;
            cPRCD.PAWCatchingAssignmentButton  = null;

            StopRepairAssignment(repairData, cPRCD);
            CutRepairAssignments(repairData);
        }
Esempio n. 4
0
        void ToggleRepairAssigning(RepairData repairData)
        {
            CustomPRCData customPRCData = repairData.customControllerData as CustomPRCData;

            customPRCData.isBeingAssigned = !customPRCData.isBeingAssigned;

            if (customPRCData.isBeingAssigned)
            {
                StartRepairAssignment(repairData, customPRCData);
            }
            else
            {
                StopRepairAssignment(repairData, customPRCData);
            }
        }
Esempio n. 5
0
        void CutRepairAssignments(RepairData repairData)
        {
            CustomPRCData cPRCD = (repairData.customControllerData as CustomPRCData);

            if (cPRCD.PAWCutAssignmentsButton != null)
            {
                Events.Remove(cPRCD.PAWCutAssignmentsButton);
                part.Events.Remove(cPRCD.PAWCutAssignmentsButton);
                cPRCD.PAWCutAssignmentsButton = null;
            }

            cPRCD.assignedParticipants.RemoveAll((IRepairParticipant a) => a == null);
            foreach (IRepairParticipant repairParticipant in cPRCD.assignedParticipants)
            {
                repairParticipant.DeassignRepair(repairData);
            }
            cPRCD.assignedParticipants.Clear();
        }
Esempio n. 6
0
        static void PerformAssignment(IRepairParticipant repairParticipant, RepairData repairData)
        {
            CustomPRCData cPRCD = repairData.customControllerData as CustomPRCData;

            cPRCD.assignedParticipants.Add(repairParticipant);
            repairParticipant.AssignRepair(repairData);

            double newlyAssignedQuality = repairParticipant.GetAssignedQuality(repairData);

            if (newlyAssignedQuality > cPRCD.maxAssignedQuality)
            {
                cPRCD.maxAssignedQuality = newlyAssignedQuality;
            }

            if (repairParticipant.IsHandlingThisRepairNow(repairData) && newlyAssignedQuality > cPRCD.currentlyAvailableQuality)
            {
                cPRCD.currentlyAvailableQuality = newlyAssignedQuality;
            }

            if (newlyAssignedQuality > cPRCD.workingAtQuality && (repairData.progressRatio != 0 || cPRCD.isRunning))
            {
                // TODO: notify about ability to restart repair for better quality
            }
        }
Esempio n. 7
0
 void StopRepairAssignment(RepairData repairData, CustomPRCData customPRCData)
 {
     customPRCData.PAWCatchingAssignmentButton.guiName = $"Start Assigning: {repairData.RepairOptionDescription}";
     repairsCatchingAssignments.RemoveAll((RepairData a) => a == repairData);
 }