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