コード例 #1
0
 public void Update()
 {
     targetSOI = targetVessel.mainBody.name;
     targetAlt = (float)targetVessel.altitude / 1000f;
     if (hailerGUI.nearBeacon != null)
     {
         pathCheck = new PathCheck(hailerGUI.nearBeacon.Vessel, targetVessel, hailerGUI.nearBeacon.PathGLimit);
         float tripdist = Vector3.Distance(hailerGUI.nearBeacon.Vessel.GetWorldPos3D(), targetVessel.GetWorldPos3D());
         tripCost   = hailerGUI.nearBeacon.GetTripBaseCost(tripdist, hailerGUI.tonnage);
         tripCost   = hailerGUI.nearBeacon.GetTripFinalCost(tripCost, hailerGUI.vessel, targetVessel, hailerGUI.tonnage, hailerGUI.HCUPartsList);
         affordable = true;
         int i = hailerGUI.nearBeacon.JumpResources.Count - 1;
         while (i >= 0)
         {
             if (hailerGUI.nearBeacon.RequireResource(hailerGUI.nearBeacon.JumpResources[i].resID, (double)(tripCost * hailerGUI.nearBeacon.JumpResources[i].ratio), false))
             {
                 i--;
                 continue;
             }
             affordable = false;
             break;
         }
         returnCost       = float.PositiveInfinity;
         returnAffordable = false;
         if (farBeaconVessels.ContainsKey(targetVessel))
         {
             returnFuelCheck = farBeaconVessels[targetVessel].Any((ProtoBeacon pb) => pb.JumpResources.All((ESLDJumpResource res) => res.fuelCheck));
             precision       = 3.40282347E+38f;
             for (int i2 = farBeaconVessels[targetVessel].Count - 1; i2 >= 0; i2--)
             {
                 precision = Math.Min(farBeaconVessels[targetVessel][i2].GetTripSpread(tripdist), precision);
                 float possibleReturnCost = farBeaconVessels[targetVessel][i2].GetTripBaseCost(tripdist, hailerGUI.tonnage);
                 bool  flag = false;
                 if (returnFuelCheck)
                 {
                     flag = farBeaconVessels[targetVessel][i2].JumpResources.All((ESLDJumpResource res) => res.fuelCheck && (double)(res.ratio * possibleReturnCost) <= res.fuelOnBoard);
                     if (flag)
                     {
                         returnAffordable = true;
                     }
                 }
                 if (possibleReturnCost < returnCost && ((!returnFuelCheck || !returnAffordable) | flag))
                 {
                     returnCost   = possibleReturnCost;
                     returnBeacon = farBeaconVessels[targetVessel][i2];
                 }
             }
         }
         else
         {
             returnFuelCheck = false;
             precision       = hailerGUI.nearBeacon.GetTripSpread(tripdist);
         }
     }
     else
     {
         pathCheck = new PathCheck(null, targetVessel, 0f);
     }
 }
コード例 #2
0
        public static List <ProtoBeacon> QueryVesselFarBeacons(ProtoVessel vesselToQuery)
        {
            List <ProtoBeacon>       list = new List <ProtoBeacon>();
            List <ProtoPartSnapshot> protoPartSnapshots = vesselToQuery.protoPartSnapshots;
            int count = protoPartSnapshots.Count;

            for (int i = 0; i < count; i++)
            {
                List <ProtoPartModuleSnapshot> list2 = protoPartSnapshots[i].modules.FindAll((ProtoPartModuleSnapshot m) => m.moduleName == "ESLDBeacon");
                int count2 = list2.Count;
                for (int j = 0; j < count2; j++)
                {
                    ProtoBeacon protoBeacon = new ProtoBeacon(list2[j].moduleValues, protoPartSnapshots[i].partInfo.partConfig.GetNodes("MODULE", "name", "ESLDBeacon")[j]);
                    protoBeacon.Vessel = vesselToQuery.vesselRef;
                    if (protoBeacon.activated && protoBeacon.moduleIsEnabled && protoBeacon.jumpTargetable)
                    {
                        list.Add(protoBeacon);
                    }
                }
            }
            return(list);
        }
コード例 #3
0
        public static List <ProtoBeacon> QueryVesselFarBeacons(ProtoVessel vesselToQuery)
        {
            List <ProtoBeacon>       beacons = new List <ProtoBeacon>();
            List <ProtoPartSnapshot> parts   = vesselToQuery.protoPartSnapshots;
            int partCount = parts.Count;

            for (int i = 0; i < partCount; i++)
            {
                List <ProtoPartModuleSnapshot> modules = parts[i].modules.FindAll(m => m.moduleName == "ESLDBeacon");
                int moduleCount = modules.Count;
                for (int j = 0; j < moduleCount; j++)
                {
                    ProtoBeacon protoBeacon = new ProtoBeacon(modules[j].moduleValues, parts[i].partInfo.partConfig.GetNodes("MODULE", "name", "ESLDBeacon")[j]);
                    protoBeacon.Vessel = vesselToQuery.vesselRef;
                    if (protoBeacon.activated && protoBeacon.moduleIsEnabled && protoBeacon.jumpTargetable)
                    {
                        beacons.Add(protoBeacon);
                    }
                }
            }
            return(beacons);
        }
コード例 #4
0
            public void Update()
            {
                targetSOI = targetVessel.mainBody.name;
                targetAlt = (float)targetVessel.altitude / 1000;
                if (hailerGUI.nearBeacon != null)
                {
                    pathCheck = new PathCheck(hailerGUI.nearBeacon.Vessel, targetVessel, hailerGUI.nearBeacon.PathGLimit);
                }
                else
                {
                    pathCheck = new PathCheck(null, targetVessel, 0);
                    return;
                }
                float tripdist = Vector3.Distance(hailerGUI.nearBeacon.Vessel.GetWorldPos3D(), targetVessel.GetWorldPos3D());

                tripCost = hailerGUI.nearBeacon.GetTripBaseCost(tripdist, hailerGUI.tonnage);
                tripCost = hailerGUI.nearBeacon.GetTripFinalCost(tripCost, hailerGUI.vessel, targetVessel, hailerGUI.tonnage, hailerGUI.HCUPartsList);
                //float cost = tripCost;
                affordable = true;
                for (int i = hailerGUI.nearBeacon.JumpResources.Count - 1; i >= 0; i--)
                {
                    if (!hailerGUI.nearBeacon.RequireResource(hailerGUI.nearBeacon.JumpResources[i].resID, tripCost * hailerGUI.nearBeacon.JumpResources[i].ratio, false))
                    {
                        affordable = false;
                        break;
                    }
                }
                //HailerGUI hailer = hailerGUI;
                //affordable = hailerGUI.nearBeacon.JumpResources.All(res => hailer.nearBeacon.RequireResource(res.resID, res.ratio * cost, false));
                returnCost       = float.PositiveInfinity;
                returnAffordable = false;
                if (farBeaconVessels.ContainsKey(targetVessel))
                {
                    returnFuelCheck = farBeaconVessels[targetVessel].Any(pb => pb.JumpResources.All(res => res.fuelCheck));
                    precision       = float.MaxValue;
                    for (int i = farBeaconVessels[targetVessel].Count - 1; i >= 0; i--)
                    {
                        precision = Math.Min(farBeaconVessels[targetVessel][i].GetTripSpread(tripdist), precision);
                        float possibleReturnCost = farBeaconVessels[targetVessel][i].GetTripBaseCost(tripdist, hailerGUI.tonnage);
                        bool  beaconCanAfford    = false;
                        if (returnFuelCheck)
                        {
                            beaconCanAfford = farBeaconVessels[targetVessel][i].JumpResources.All(res => res.fuelCheck && res.ratio * possibleReturnCost <= res.fuelOnBoard);
                            if (beaconCanAfford)
                            {
                                returnAffordable = true;
                            }
                        }
                        if (possibleReturnCost < returnCost && (!returnFuelCheck || !returnAffordable || beaconCanAfford))
                        {
                            returnCost   = possibleReturnCost;
                            returnBeacon = farBeaconVessels[targetVessel][i];
                        }
                    }
                }
                else
                {
                    returnFuelCheck = false;
                    precision       = hailerGUI.nearBeacon.GetTripSpread(tripdist);
                }
            }