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); }
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()); }