Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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;
        }