public Dictionary <string, IResourceTransferController> GetResourceTransferControllers(
            ResourceTransferTargetMetadata targetA,
            ResourceTransferTargetMetadata targetB)
        {
            var resourcesInCommon = targetA.Resources.Keys
                                    .Intersect(targetB.Resources.Keys)
                                    .OrderBy(r => r);

            var vesselA = FlightGlobals.Vessels
                          .FirstOrDefault(v => v.id.ToString("N") == targetA.Id);
            var vesselB = FlightGlobals.Vessels
                          .FirstOrDefault(v => v.id.ToString("N") == targetB.Id);
            var resourceTargetA = new ResourceTransferTarget(vesselA);
            var resourceTargetB = new ResourceTransferTarget(vesselB);

            var controllers = new Dictionary <string, IResourceTransferController>();

            foreach (var resource in resourcesInCommon)
            {
                controllers.Add(
                    resource,
                    new ResourceTransferController(resourceTargetA, resourceTargetB, resource));
            }
            return(controllers);
        }
Пример #2
0
 public ResourceTransferController(
     ResourceTransferTarget targetA,
     ResourceTransferTarget targetB,
     string resource)
 {
     Resource = resource;
     _targetA = targetA;
     _targetB = targetB;
 }
        public List <ResourceTransferTargetMetadata> GetResourceTransferTargets()
        {
            var nearbyVessels = LogisticsTools.GetNearbyVessels(
                LOCAL_LOGISTICS_RANGE,
                true,
                FlightGlobals.ActiveVessel,
                false);

            return(nearbyVessels
                   .Where(v => v.Parts.Any(p => p.Resources.Any(r =>
                                                                !BLACKLIST.Contains(r.resourceName) &&
                                                                ResourceTransferTarget.IsTransferable(r))))
                   .Select(v => new ResourceTransferTargetMetadata
            {
                DisplayName = GetVesselDisplayName(v),
                Id = v.id.ToString("N"),
                IsCurrentVessel = v == FlightGlobals.ActiveVessel,
                Resources = ResourceTransferTarget.GetResourceMetadata(v.Parts),
            })
                   .ToList());
        }