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