Ejemplo n.º 1
0
        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?
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        public void periodicUpdate()
        {
            this.currentLocation = null;

            foreach (SupplyPoint pt in SupplyChainController.instance.points)
            {
                if (pt.isVesselAtPoint(this.vessel))
                {
                    this.currentLocation = pt;
                    break;
                }
            }
        }
Ejemplo n.º 6
0
        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>();
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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;
                }
            }
        }
Ejemplo n.º 10
0
        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;
        }