コード例 #1
0
ファイル: BARISAppFlightView.cs プロジェクト: AkiraR/BARIS
        protected void addFlightExperience()
        {
            List <ModuleQualityControl> qualityModules = FlightGlobals.ActiveVessel.FindPartModulesImplementing <ModuleQualityControl>();

            foreach (ModuleQualityControl qualityModule in qualityModules)
            {
                //Add flight experience
                BARISScenario.Instance.RecordFlightExperience(qualityModule.part, 5);

                //Now recalcuate quality
                qualityModule.flightExperienceBonus = BARISScenario.Instance.GetFlightBonus(qualityModule.part);
                qualityModule.quality        = qualityModule.GetMaxQuality();
                qualityModule.currentQuality = qualityModule.quality;
                qualityModule.UpdateQualityDisplay(BARISScenario.GetConditionSummary(qualityModule.currentMTBF, qualityModule.MaxMTBF, qualityModule.currentQuality, qualityModule.quality));
                debugLog(qualityModule.part.partInfo.title + " Flight Experience: " + qualityModule.flightExperienceBonus + " New Quality: " + qualityModule.quality);
            }

            //Update editor bays
            BARISScenario.Instance.UpdateEditorBayFlightBonuses();

            //Update the cache
            UpdateCachedData();

            //Save the game
            GamePersistence.SaveGame("persistent", HighLogic.SaveFolder, SaveMode.OVERWRITE);
        }
コード例 #2
0
        public void CalculateRepairCosts()
        {
            ConfigNode snapshot;
            int        maxQuality            = 0;
            int        integrationBonus      = -1;
            int        flightExperienceBonus = BARISScenario.DefaultFlightBonus;
            int        qualityCap            = -1;
            int        repairCount           = 0;
            int        quality  = 5;
            int        vabBonus = BARISScenario.Instance.GetIntegrationCap(true);
            int        sphBonus = BARISScenario.Instance.GetIntegrationCap(false);

            for (int index = 0; index < qualityModuleSnapshots.Length; index++)
            {
                //Get the snapshot
                snapshot = qualityModuleSnapshots[index].moduleValues;

                //Setup default values
                integrationBonus      = -1;
                flightExperienceBonus = BARISScenario.DefaultFlightBonus;
                qualityCap            = -1;
                repairCount           = 0;
                quality = 5;

                //Get the stats we need
                if (snapshot.HasValue("quality"))
                {
                    quality = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("quality"));
                }
                if (snapshot.HasValue("qualityCap"))
                {
                    qualityCap = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("qualityCap"));
                }
                if (snapshot.HasValue("integrationBonus"))
                {
                    integrationBonus = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("integrationBonus"));
                }
                if (snapshot.HasValue("flightExperienceBonus"))
                {
                    flightExperienceBonus = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("flightExperienceBonus"));
                }
                if (snapshot.HasValue("repairCount"))
                {
                    repairCount = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("repairCount"));
                }

                //Estimate integration bonus if needed.
                if (integrationBonus == -1)
                {
                    if (vabBonus > sphBonus)
                    {
                        integrationBonus = vabBonus;
                    }
                    else
                    {
                        integrationBonus = sphBonus;
                    }
                }

                //Accumulate max quality.
                maxQuality += BARISScenario.GetMaxQuality(quality, integrationBonus, flightExperienceBonus, qualityCap, repairCount);
            }

            //Calculate the time
            repairCostTime = Mathf.RoundToInt(maxQuality / BARISScenario.MaxWorkersPerBay);
            if (repairCostTime <= BARISScenario.MinimumTigerTeamRepairDays)
            {
                repairCostTime = BARISScenario.MinimumTigerTeamRepairDays;
            }

            //Calculate the funding cost
            repairCostFunds = repairCostTime * BARISScenario.MaxWorkersPerBay * BARISScenario.PayrollPerWorker * BARISScenario.RepairFactor;

            //Calculate the science cost
            repairCostScience = (float)repairCostTime * BARISScenario.RepairFactor;
        }
コード例 #3
0
ファイル: ModuleTestStand.cs プロジェクト: Makrond/BARIS
        public void onPartBroken(BaseQualityControl moduleQualityControl)
        {
            if (!isRunning || moduleQualityControl.part == this.part)
            {
                return;
            }

            ModuleQualityControl qualityModule = null;

            if (moduleQualityControl is ModuleQualityControl)
            {
                qualityModule = (ModuleQualityControl)moduleQualityControl;
            }
            if (qualityModule == null)
            {
                return;
            }

            //Record original highlight color
            qualityModule.originalHighlightColor = qualityModule.part.highlightColor;

            //Set broken highlight color
            qualityModule.part.highlightColor = Color.red;
            qualityModule.part.Highlight(true);

            //Roll RNG to see if the part gains quality.
            int    rollResult   = UnityEngine.Random.Range(minDieRoll, maxDieRoll);
            string partTitle    = string.Empty;
            int    totalQuality = 0;
            string message      = "";

            //If we've met our target number then improve part quality.
            if (rollResult >= improveQualityTargetNumber)
            {
                //Get the part title
                partTitle = qualityModule.part.partInfo.title;

                //Don't exceed max quality.
                totalQuality = qualityModule.quality + BARISScenario.Instance.GetFlightBonus(qualityModule.part);
                if (totalQuality + qualityImprovementAmount <= BARISBridge.QualityCap)
                {
                    //Record the flight experience.
                    BARISScenario.Instance.RecordFlightExperience(qualityModule.part, BARISBridge.FlightsPerQualityBonus * qualityImprovementAmount);

                    //Calculate the new quality rating.
                    totalQuality = qualityModule.quality + BARISScenario.Instance.GetFlightBonus(qualityModule.part);
                    message      = partTitle + " " + BARISScenario.QualityLabel + totalQuality;

                    //Inform the user.
                    ScreenMessages.PostScreenMessage(message, BARISScenario.MessageDuration, ScreenMessageStyle.UPPER_CENTER);
                }

                else
                {
                    //Max quality reached.
                    message = partTitle + Localizer.Format(BARISScenario.kMaxQualityReached);

                    //Inform the user.
                    ScreenMessages.PostScreenMessage(message, BARISScenario.MessageDuration, ScreenMessageStyle.UPPER_CENTER);
                }
            }

            //Roll to see if the vessel explodes. If not then increase the chances slightly.
            float explodeResult = UnityEngine.Random.Range(0f, 100.0f);

            if (explodeResult >= (100.0f - vesselExplodeProbability))
            {
                for (int index = 0; index < qualityModules.Length; index++)
                {
                    qualityModules[index].SetMarkedForDeath(true);
                }
            }
            else
            {
                vesselExplodeProbability += explodeProbabilityIncrement;

                //Update quality
                qualityModule.quality = totalQuality;
                qualityModule.UpdateQualityDisplay(BARISScenario.GetConditionSummary(qualityModule.currentMTBF, qualityModule.MaxMTBF, qualityModule.currentQuality, qualityModule.MaxQuality));
            }
        }
コード例 #4
0
        public void DeclareVesselFixed()
        {
            ConfigNode snapshot;
            int        currentQuality        = 0;
            int        integrationBonus      = -1;
            int        flightExperienceBonus = BARISScenario.DefaultFlightBonus;
            int        qualityCap            = -1;
            int        repairCount           = 0;
            int        quality              = 5;
            int        vabBonus             = BARISScenario.Instance.GetIntegrationCap(true);
            int        sphBonus             = BARISScenario.Instance.GetIntegrationCap(false);
            double     mtbfBonus            = 600.0f;
            double     mtbf                 = 600.0f;
            double     mtbfCap              = BARISScenario.MTBFCap;
            float      mtbfRepairMultiplier = 0.7f;
            double     currentMTBF          = 0;

            for (int index = 0; index < qualityModuleSnapshots.Length; index++)
            {
                //Get the snapshot
                snapshot = qualityModuleSnapshots[index].moduleValues;

                //Setup default values
                integrationBonus      = -1;
                flightExperienceBonus = BARISScenario.DefaultFlightBonus;
                qualityCap            = -1;
                repairCount           = 0;
                quality = 5;

                //Get the stats we need
                if (snapshot.HasValue("quality"))
                {
                    quality = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("quality"));
                }
                if (snapshot.HasValue("qualityCap"))
                {
                    qualityCap = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("qualityCap"));
                }
                if (snapshot.HasValue("integrationBonus"))
                {
                    integrationBonus = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("integrationBonus"));
                }
                if (snapshot.HasValue("flightExperienceBonus"))
                {
                    flightExperienceBonus = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("flightExperienceBonus"));
                }
                if (snapshot.HasValue("repairCount"))
                {
                    repairCount = int.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("repairCount"));
                }
                if (snapshot.HasValue("mtbfRepairMultiplier"))
                {
                    mtbfRepairMultiplier = float.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("mtbfRepairMultiplier"));
                }
                if (snapshot.HasValue("mtbfBonus"))
                {
                    mtbfBonus = double.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("mtbfBonus"));
                }
                if (snapshot.HasValue("mtbf"))
                {
                    mtbf = double.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("mtbf"));
                }
                if (snapshot.HasValue("mtbfCap"))
                {
                    mtbfCap = double.Parse(qualityModuleSnapshots[index].moduleValues.GetValue("mtbfCap"));
                }

                //Estimate integration bonus if needed.
                if (integrationBonus == -1)
                {
                    if (vabBonus > sphBonus)
                    {
                        integrationBonus = vabBonus;
                    }
                    else
                    {
                        integrationBonus = sphBonus;
                    }
                }

                //Increment repair count
                repairCount += 1;
                qualityModuleSnapshots[index].moduleValues.SetValue("repairCount", repairCount);

                //Reset current quality
                currentQuality = BARISScenario.GetMaxQuality(quality, integrationBonus, flightExperienceBonus, qualityCap, repairCount);
                if (currentQuality > quality)
                {
                    currentQuality = quality;
                }
                qualityModuleSnapshots[index].moduleValues.SetValue("currentQuality", currentQuality);

                //Reset current MTBF
                currentMTBF = BARISScenario.GetMaxMTBF(mtbf, mtbfCap, repairCount, mtbfRepairMultiplier, mtbfBonus);
                if (currentMTBF > mtbf)
                {
                    currentMTBF = mtbf;
                }
                qualityModuleSnapshots[index].moduleValues.SetValue("currentMTBF", currentMTBF);

                //Declare the part fixed
                qualityModuleSnapshots[index].moduleValues.SetValue("isFixedOnStart", true);
                qualityModuleSnapshots[index].moduleValues.SetValue("isBrokenOnStart", false);
            }
        }