private static PartResource GetOrderedPartResource(IEnumerable<PartResource> localResources, Vessel activeVessel, bool rootFirst, bool transferOut, OperationMode opMode, ModuleMaintenanceTransferEnabler module) { const double treshold = 0.001d; var rootPart = (opMode == OperationMode.Kerbal) ? activeVessel.rootPart : module.part; if (transferOut) { var allWithAmount = localResources.Where(r => r.amount > treshold).ToList(); if (allWithAmount.Count > 1) { if (rootFirst) { foreach (var partResource in allWithAmount) { if (partResource.part == rootPart) { return partResource; } } } else { foreach (var partResource in allWithAmount) { if (partResource.part != rootPart) { return partResource; } } } } return allWithAmount.Count >= 1 ? allWithAmount[0] : null; } var allWithSpace = localResources.Where(r => (r.maxAmount - r.amount) > treshold).ToList(); if (allWithSpace.Count > 1) { if (rootFirst) { foreach (var partResource in allWithSpace) { if (partResource.part == rootPart) { return partResource; } } } else { foreach (var partResource in allWithSpace) { if (partResource.part != rootPart) { return partResource; } } } } return allWithSpace.Count >= 1 ? allWithSpace[0] : null; }
private static bool _checkVesselForTransfer(ModuleMaintenanceTransferEnabler module, bool userAction) { var ok = true; var msg = string.Empty; if (!module.MaintenanceTransferActive) { msg = "No Maintenance-Transfer-Module active!"; ok = false; } else if (!module.ConnectedPartsOnly) { if (module.TooManyParts) { ok = false; msg = "Maintenance vessel has too many parts!"; } else if (module.TooHeavy) { ok = false; msg = "Maintenance vessel is too heavy!"; } } if (!ok && userAction) { OSD.PostMessageUpperCenter("[KERT] " + msg, 2f); } return ok; }
private static List<CommonResource> GetCommonResources(Vessel vessel, Part part, OperationMode opMode, ModuleMaintenanceTransferEnabler module = null) { var resList = new List<CommonResource>(); switch (opMode) { case OperationMode.Kerbal: { resList = (from resource in part.Resources.OfType<PartResource>() let kerbalResList = GetAllPartResourcesOfVessel(vessel).Where(kerbalResource => kerbalResource.resourceName == resource.resourceName).ToList() where kerbalResList.Count > 0 select new CommonResource(resource, kerbalResList)).ToList(); } break; case OperationMode.Maintenance: { if (module != null) { if (module.ConnectedPartsOnly) { var parts = new HashSet<Part> {module.part}; if (module.part.parent != null) { parts.Add(module.part.parent); } foreach (var child in module.part.children) { parts.Add(child); } foreach (var attachNode in module.part.attachNodes.Where(an => an.attachedPart != null)) { parts.Add(attachNode.attachedPart); } resList = (from resource in part.Resources.OfType<PartResource>() let localResList = GetAllPartResourcesOfParts(parts).Where(r => r.resourceName == resource.resourceName).ToList() where localResList.Count > 0 select new CommonResource(resource, localResList)).ToList(); } else { resList = (from resource in part.Resources.OfType<PartResource>() let localResList = GetAllPartResourcesOfVessel(vessel).Where(r => r.resourceName == resource.resourceName).ToList() where localResList.Count > 0 select new CommonResource(resource, localResList)).ToList(); } } } break; } return resList; }