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); } } }
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); } }
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); }
void ToggleRepairAssigning(RepairData repairData) { CustomPRCData customPRCData = repairData.customControllerData as CustomPRCData; customPRCData.isBeingAssigned = !customPRCData.isBeingAssigned; if (customPRCData.isBeingAssigned) { StartRepairAssignment(repairData, customPRCData); } else { StopRepairAssignment(repairData, customPRCData); } }
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(); }
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 } }
void StopRepairAssignment(RepairData repairData, CustomPRCData customPRCData) { customPRCData.PAWCatchingAssignmentButton.guiName = $"Start Assigning: {repairData.RepairOptionDescription}"; repairsCatchingAssignments.RemoveAll((RepairData a) => a == repairData); }