예제 #1
0
 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;
 }
예제 #2
0
 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;
 }
예제 #3
0
        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;
        }