Esempio n. 1
0
        public void CreatePartSet()
        {
            double refresh = Planetarium.GetUniversalTime();

            if (lastRefresh >= refresh)
            {
                return;
            }
            lastRefresh = refresh;

            // The following replicates the logic in KSP.UI.Screens.ResourceDisplay.CreateResourceList
            // We're creating the set every time because it doesn't pay attention to the various events
            // that would tell us that the old partset is no longer valid.
            partHash.Clear();
            int          vstgComp = shared.Vessel.currentStage - 2;
            var          parts    = shared.Vessel.Parts;
            global::Part part;

            for (int i = parts.Count - 1; i >= 0; --i)
            {
                part = parts[i];
                if (part.State == PartStates.ACTIVE)
                {
                    foreach (var crossPart in part.crossfeedPartSet.GetParts())
                    {
                        if (crossPart.inverseStage > vstgComp)
                        {
                            partHash.Add(crossPart);
                        }
                    }
                }
            }
            partSet.RebuildInPlace();
        }
Esempio n. 2
0
        public void CreatePartSet()
        {
            if (!stale)
            {
                return;
            }

            // We're creating the set every time because it doesn't pay attention to the various events
            // that would tell us that the old partset is no longer valid.
            partHash.Clear();

            var vesselTarget  = shared.VesselTarget;
            var nextDecoupler = vesselTarget.NextDecoupler?.Part.inverseStage ?? -1;

            // Find all relevant parts that are to be separated by next decoupler/separator/dock
            foreach (var part in shared.Vessel.Parts)
            {
                // Engines only
                if (part.State != PartStates.ACTIVE)
                {
                    continue;
                }
                // All tanks accessible to this engine ...
                foreach (var crossPart in part.crossfeedPartSet.GetParts())
                {
                    // ... that are to be separated by next decoupler
                    if (vesselTarget[crossPart].DecoupledIn >= nextDecoupler)
                    {
                        partHash.Add(crossPart);
                    }
                }
            }
            partSet.RebuildInPlace();
            stale = false;

            SafeHouse.Logger.Log("StageValues: nd={0}, parts={1}", nextDecoupler, partHash.Count);
        }