private void UpdateKCTRates() { Profiler.BeginSample("RP0Maintenance UpdateKCTRates"); KCTPadLevels.Clear(); for (int i = KCTPadCounts.Length; i-- > 0;) { KCTPadCounts[i] = 0; } foreach (KSCItem ksc in KCTGameStates.KSCs) { double buildRate = 0d; for (int i = ksc.VABRates.Count; i-- > 0;) { buildRate += Math.Max(0d, ksc.VABRates[i] + BuildRateOffset); } for (int i = ksc.SPHRates.Count; i-- > 0;) { buildRate += Math.Max(0d, ksc.SPHRates[i] + BuildRateOffset); } if (buildRate < 0.01d) { continue; } KCTBuildRates[ksc.KSCName] = buildRate; for (int i = ksc.LaunchPads.Count; i-- > 0;) { KCT_LaunchPad pad = ksc.LaunchPads[i]; int roundedPadLvl = (int)Math.Round(pad.fractionalLevel); if (pad.isOperational && roundedPadLvl < PadLevelCount) { ++KCTPadCounts[roundedPadLvl]; KCTPadLevels.Add(pad.fractionalLevel); } } } KCTResearchRate = MathParser.ParseNodeRateFormula(10); Profiler.EndSample(); }
private void UpdateKCTRates() { Profiler.BeginSample("RP0Maintenance UpdateKCTRates"); for (int i = KCTPadCounts.Length; i-- > 0;) { KCTPadCounts[i] = 0; } foreach (KSCItem ksc in KCTGameStates.KSCs) { double buildRate = 0d; for (int i = ksc.VABRates.Count; i-- > 0;) { buildRate += Math.Max(0d, ksc.VABRates[i] + BuildRateOffset); } for (int i = ksc.SPHRates.Count; i-- > 0;) { buildRate += Math.Max(0d, ksc.SPHRates[i] + BuildRateOffset); } if (buildRate < 0.01d) { continue; } KCTBuildRates[ksc.KSCName] = buildRate; for (int i = ksc.LaunchPads.Count; i-- > 0;) { int lvl = ksc.LaunchPads[i].level; if (lvl >= 0 && lvl < PadLevelCount) { ++KCTPadCounts[lvl]; } } } KCTResearchRate = MathParser.ParseNodeRateFormula(10); Profiler.EndSample(); }
protected void Update() { if (HighLogic.CurrentGame == null || KerbalConstructionTime.KerbalConstructionTime.Instance == null) { return; } if (skipTwo) { if (skipOne) { skipOne = false; return; } skipTwo = false; return; } if (MaintenanceHandler.Instance == null) { return; } double time = Planetarium.GetUniversalTime(); if (nextTime > time) { return; } nextTime = time + checkInterval; for (int i = padCounts.Length; i-- > 0;) { padCounts[i] = 0; } foreach (KSCItem ksc in KCTGameStates.KSCs) { double buildRate = 0d; for (int i = ksc.VABRates.Count; i-- > 0;) { buildRate += Math.Max(0d, ksc.VABRates[i] + BuildRateOffset); } for (int i = ksc.SPHRates.Count; i-- > 0;) { buildRate += Math.Max(0d, ksc.SPHRates[i] + BuildRateOffset); } if (buildRate < 0.01d) { continue; } MaintenanceHandler.Instance.kctBuildRates[ksc.KSCName] = buildRate; for (int i = ksc.LaunchPads.Count; i-- > 0;) { int lvl = ksc.LaunchPads[i].level; if (lvl >= 0 && lvl < padLevels) { ++padCounts[lvl]; } } } double RDRate = MathParser.ParseNodeRateFormula(10, 0, false); MaintenanceHandler.Instance.kctResearchRate = RDRate; MaintenanceHandler.Instance.kctPadCounts = padCounts; }