public static bool registerNewSupplyPoint(SupplyPoint point) { SupplyChainController.instance.points.Add(point); Debug.Log("[SupplyChain] Registered new supply point: " + point.name); return(true); // TODO: maybe check for redundant points? }
public void createNewSupplyPoint() { foreach (SupplyPoint point in SupplyChainController.instance.points) { if (point.isVesselAtPoint(vessel)) { return; } } Debug.Log("[SupplyPoint] Creating new supply point."); // Create a new flight point here. if (vessel.situation == Vessel.Situations.ORBITING && vessel.orbit.eccentricity > 0 && vessel.orbit.eccentricity < 1) { flightStartPoint = new OrbitalSupplyPoint(vessel); SupplyChainController.registerNewSupplyPoint(flightStartPoint); } else { // Can't create a new flight point; unstable situation. Debug.LogError("[SupplyPoint] Cannot create new supply point: in unstable orbit!"); return; } }
public void beginFlightTracking() { updateResourceCapacity(); updateResourceAmounts(); Debug.Log("[SupplyChain] Entering rest of BeginFlightTracking"); flightStartPoint = null; foreach (SupplyPoint point in SupplyChainController.instance.points) { Debug.Log("[SupplyPoint] Inspecting point: " + point.name); if (point.isVesselAtPoint(vessel)) { Debug.Log("[SupplyChain] Found matching supply point: " + point.name); flightStartPoint = point; break; } } if (flightStartPoint == null) { Debug.Log("[SupplyPoint] Creating new supply point."); // Create a new flight point here. if (vessel.situation == Vessel.Situations.ORBITING && vessel.orbit.eccentricity > 0 && vessel.orbit.eccentricity < 1) { flightStartPoint = new OrbitalSupplyPoint(vessel); SupplyChainController.registerNewSupplyPoint(flightStartPoint); } else { // Can't create a new flight point; unstable situation. Debug.LogError("[SupplyPoint] Cannot create new supply point: in unstable orbit!"); return; } } Debug.Log("[SupplyPoint] Setting up resources."); flightStartingResources = new Dictionary <int, double>(); foreach (int r in vesselResourceAmounts.Keys) { Debug.Log("[SupplyChain] Tracking resource: " + PartResourceLibrary.Instance.GetDefinition(r).name + " (have" + Convert.ToString(vesselResourceAmounts[r]) + ")"); flightStartingResources.Add(r, vesselResourceAmounts[r]); } flightStartingMET = vessel.missionTime; flightStartingMass = vessel.totalMass; Debug.Log("[SupplyPoint] Vessel mass: " + Convert.ToString(vessel.totalMass)); currentlyTrackingFlight = true; Debug.Log("[SupplyPoint] Changing event states."); Events["endFlightTracking"].guiActive = true; Events["endFlightTracking"].active = true; Events["beginFlightTracking"].guiActive = false; Events["beginFlightTracking"].active = false; }
public static bool deregisterNewSupplyPoint(SupplyPoint point) { Debug.Log("[SupplyChain] Unregistered supply point: " + point.name); if (SupplyChainController.instance.points.Contains(point)) { SupplyChainController.instance.points.Remove(point); return(true); } return(false); }
public void periodicUpdate() { this.currentLocation = null; foreach (SupplyPoint pt in SupplyChainController.instance.points) { if (pt.isVesselAtPoint(this.vessel)) { this.currentLocation = pt; break; } } }
public SupplyLink(VesselData v, SupplyPoint from, SupplyPoint to) { this.freestanding = false; this.onComplete = new List <Action <SupplyChainAction> >(); this.id = Guid.NewGuid(); this.location = from; this.to = to; this.linkVessel = v; this.linkVesselID = v.trackingID; v.links.Add(this); this.timeRequired = 0; this.maxMass = 0; this.resourcesRequired = new Dictionary <int, double>(); }
public override void LoadCustom(ConfigNode node) { id = new Guid(node.GetValue("id")); to = SupplyChainController.getPointByGuid(new Guid(node.GetValue("to"))); node.TryGetValue("maxMass", ref maxMass); /* Load resources. */ ConfigNode[] required = node.GetNodes("RequiredResource"); resourcesRequired = new Dictionary <int, double>(); foreach (ConfigNode rscNode in required) { String name = rscNode.GetValue("name"); double amount = Convert.ToDouble(rscNode.GetValue("amount")); resourcesRequired.Add(PartResourceLibrary.Instance.GetDefinition(name).id, amount); } this.linkVessel.links.Add(this); }
public override bool canExecute() { if (targetVessel == null || targetVessel.vessel == null || this.location == null) { return(false); } /* Find target vessel location. */ SupplyPoint targetLocation = targetVessel.currentLocation; if (targetLocation != null) { return(targetLocation.isVesselAtPoint(this.linkVessel.vessel)); } else { Debug.LogError("[SupplyChain] Vessel " + targetVessel.trackingID.ToString() + " not in valid location!"); } return(false); }
private void loadCommonData(ConfigNode node) { location = SupplyChainController.getPointByGuid(new Guid(node.GetValue("location"))); node.TryGetValue("freestanding", ref this.freestanding); node.TryGetValue("timeRequired", ref timeRequired); node.TryGetValue("active", ref active); if (this.active) { node.TryGetValue("timeAtComplete", ref timeComplete); } /* Load linked vessel. */ Guid linkVesselID = new Guid(node.GetValue("linkVessel")); foreach (VesselData vd in SupplyChainController.instance.trackedVessels) { if (vd.trackingID.Equals(linkVesselID)) { this.linkVessel = vd; break; } } }
public void endFlightTracking() { if (!currentlyTrackingFlight) { Debug.LogError("[SupplyChain] Attempted to end flight tracking without starting!"); return; } updateResourceAmounts(); // are we in a stable non-escape orbit? if (vessel.situation == Vessel.Situations.ORBITING && vessel.orbit.eccentricity > 0 && vessel.orbit.eccentricity < 1) { SupplyPoint to = null; foreach (SupplyPoint point in SupplyChainController.instance.points) { if (point.isVesselAtPoint(vessel)) { Debug.Log("[SupplyChain] Found existing supply point."); to = point; break; } } if (to == null) { Debug.Log("[SupplyChain] Creating new supply point."); to = new OrbitalSupplyPoint(vessel); SupplyChainController.registerNewSupplyPoint(to); } if (!SupplyChainController.isVesselTracked(vessel)) { VesselData nv = new VesselData(vessel); SupplyChainController.registerNewTrackedVessel(nv); } VesselData vd = SupplyChainController.getVesselTrackingInfo(vessel); SupplyLink result = new SupplyLink(vd, flightStartPoint, to); result.timeRequired = (vessel.missionTime - flightStartingMET); result.maxMass = flightStartingMass; Debug.Log("[SupplyChain] Creating new supply link."); Debug.Log("[SupplyChain] From: " + result.location.name); Debug.Log("[SupplyChain] To: " + result.to.name); Debug.Log("[SupplyChain] Total Elapsed MET: " + Convert.ToString(result.timeRequired)); Debug.Log("[SupplyChain] Maximum mass: " + Convert.ToString(result.maxMass)); foreach (int rsc in flightStartingResources.Keys) { if (vesselResourceAmounts[rsc] < flightStartingResources[rsc]) { result.resourcesRequired.Add(rsc, flightStartingResources[rsc] - vesselResourceAmounts[rsc]); Debug.Log("[SupplyChain] Detected resource deficit: " + Convert.ToString(flightStartingResources[rsc] - vesselResourceAmounts[rsc]) + " of " + PartResourceLibrary.Instance.GetDefinition(rsc).name); } } SupplyChainController.registerNewSupplyLink(result); } else { Debug.Log("Canceled flight tracking: not in stable orbit."); } currentlyTrackingFlight = false; Events["endFlightTracking"].guiActive = false; Events["endFlightTracking"].active = false; Events["beginFlightTracking"].guiActive = true; Events["beginFlightTracking"].active = true; }