예제 #1
0
 protected void onUpdateSettings(BaseQualityControl moduleQualityControl)
 {
     //Quality check events
     if (BARISSettings.PartsCanBreak && BARISBreakableParts.RCSCanFail)
     {
         if (checkQualityDuringRCSToggle)
         {
             BARISScenario.Instance.onRcsUpdate += onRCSUpdate;
         }
         if (checkQualityDuringSASToggle)
         {
             BARISScenario.Instance.onSasUpdate += onSASUpdate;
         }
         if (checkQualityDuringThrottling)
         {
             BARISScenario.Instance.onThrottleUpDown += onThrottleUpdate;
         }
     }
     else
     {
         if (checkQualityDuringRCSToggle)
         {
             BARISScenario.Instance.onSasUpdate -= onRCSUpdate;
         }
         if (checkQualityDuringSASToggle)
         {
             BARISScenario.Instance.onSasUpdate -= onSASUpdate;
         }
         if (checkQualityDuringThrottling)
         {
             BARISScenario.Instance.onThrottleUpDown -= onThrottleUpdate;
         }
     }
 }
예제 #2
0
 protected void onUpdateSettings(BaseQualityControl moduleQualityControl)
 {
     if (!BARISBridge.DrillsCanFail)
     {
         isBroken = false;
     }
 }
예제 #3
0
        public void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            if (!BARISBridge.PartsCanBreak || !BARISBridge.SASCanFail)
            {
                return;
            }

            isBroken = true;
            if (moduleSAS != null)
            {
                moduleSAS.enabled   = false;
                moduleSAS.isEnabled = false;
            }

            if (reactionWheel != null)
            {
                reactionWheel.enabled   = false;
                reactionWheel.isEnabled = false;
            }

            if (this.part.vessel == FlightGlobals.ActiveVessel)
            {
                string message = Localizer.Format(this.part.partInfo.title + BARISScenario.SASBroken);
                BARISScenario.Instance.LogPlayerMessage(message);
            }
            qualityControl.UpdateQualityDisplay(qualityControl.qualityDisplay + Localizer.Format(BARISScenario.SASLabel));
        }
예제 #4
0
 public void OnPartFixed(BaseQualityControl moduleQualityControl)
 {
     isBroken                  = false;
     rcsModule.enabled         = true;
     rcsModule.isEnabled       = true;
     rcsModule.moduleIsEnabled = false;
 }
예제 #5
0
 public void SubscribeToEvents(BaseQualityControl moduleQualityControl)
 {
     qualityControl = this.part.FindModuleImplementing <BaseQualityControl>();
     qualityControl.onPartBroken           += OnPartBroken;
     qualityControl.onPartFixed            += OnPartFixed;
     qualityControl.onMothballStateChanged += onMothballStateChanged;
 }
예제 #6
0
        public void GetPartModules()
        {
            BaseEvent cmdEvent;
            int       totalEvents;

            commandModule = this.part.FindModuleImplementing <ModuleCommand>();
            if (commandModule != null)
            {
                totalEvents = commandModule.Events.Count;
                for (int index = 0; index < totalEvents; index++)
                {
                    cmdEvent                    = commandModule.Events.GetByIndex(index);
                    cmdEvent.guiActive          = false;
                    cmdEvent.guiActiveUnfocused = false;
                }
            }

            switcher = this.part.FindModuleImplementing <WBIResourceSwitcher>();
            if (switcher != null)
            {
                switcher.Events["ToggleDecals"].guiActive           = false;
                switcher.Events["ToggleDecals"].guiActiveUnfocused  = false;
                switcher.Events["DumpResources"].guiActive          = false;
                switcher.Events["DumpResources"].guiActiveUnfocused = false;
            }

            lightModule = this.part.FindModuleImplementing <WBILight>();

            qualityControl = this.part.FindModuleImplementing <BaseQualityControl>();
        }
예제 #7
0
        protected void onUpdateSettings(BaseQualityControl moduleQualityControl)
        {
            Events["ExplodeEngine"].guiActive       = BARISScenario.showDebug;
            Events["EngineStuckOn"].guiActive       = BARISScenario.showDebug;
            Events["ShutdownEngine"].guiActive      = BARISScenario.showDebug;
            Events["GenerateFailureMode"].guiActive = BARISScenario.showDebug;

            partsCanBreak = BARISScenario.partsCanBreak;
        }
예제 #8
0
        public void SubscribeToEvents(BaseQualityControl moduleQualityControl)
        {
            qualityControl = (ModuleQualityControl)moduleQualityControl;
            //qualityControl.onUpdateSettings += onUpdateSettings;
            qualityControl.onPartBroken           += OnPartBroken;
            qualityControl.onPartFixed            += OnPartFixed;
            qualityControl.onMothballStateChanged += onMothballStateChanged;

            if (BARISScenario.showDebug && qualityControl.guiVisible)
            {
            }
        }
예제 #9
0
        public void OnPartFixed(BaseQualityControl moduleQualityControl)
        {
            isBroken = true;

            //Enable all the part modules we're supposed to.
            foreach (PartModule partModule in breakablePartModules)
            {
                partModule.enabled         = true;
                partModule.isEnabled       = true;
                partModule.moduleIsEnabled = true;
            }
        }
예제 #10
0
 protected void onUpdateSettings(BaseQualityControl moduleQualityControl)
 {
     //Quality check events
     if (BARISSettings.PartsCanBreak && BARISBreakableParts.RCSCanFail)
     {
         BARISScenario.Instance.onRcsUpdate += onRcsUpdate;
     }
     else
     {
         BARISScenario.Instance.onSasUpdate -= onRcsUpdate;
     }
 }
예제 #11
0
        public void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            isBroken = true;
            opsManagerView.isBroken = isBroken;

            List <ModuleResourceConverter> converters = this.part.FindModulesImplementing <ModuleResourceConverter>();

            foreach (ModuleResourceConverter converter in converters)
            {
                converter.StopResourceConverter();
            }
        }
예제 #12
0
        public virtual void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            isBroken = true;
            StopResourceConverter();

            if (this.part.vessel == FlightGlobals.ActiveVessel)
            {
                string message = Localizer.Format(this.part.partInfo.title + BARISBridge.DrillBroken);
                BARISBridge.LogPlayerMessage(message);
            }
            qualityControl.UpdateQualityDisplay(qualityControl.qualityDisplay + Localizer.Format(BARISBridge.DrillLabel));
        }
예제 #13
0
        public void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            if (!BARISSettings.PartsCanBreak || !BARISBreakableParts.EnginesCanFail)
            {
                return;
            }

            //Generate a failure mode
            GenerateFailureMode();

            //Subscribe to the time tick event to apply failure mode.
            BARISScenario.Instance.onTimeTickEvent += failureModeTimeTick;
        }
예제 #14
0
        public void SubscribeToEvents(BaseQualityControl moduleQualityControl)
        {
            qualityControl = moduleQualityControl;
            qualityControl.onPartBroken     += OnPartBroken;
            qualityControl.onPartFixed      += OnPartFixed;
            qualityControl.onUpdateSettings += onUpdateSettings;

            //Make sure we're broken
            if (isBroken)
            {
                OnPartBroken(qualityControl);
            }
        }
예제 #15
0
        public void SubscribeToEvents(BaseQualityControl moduleQualityControl)
        {
            debugLog("SubscribeToEvents");
            qualityControl = (ModuleQualityControl)moduleQualityControl;
            qualityControl.onUpdateSettings += onUpdateSettings;
            qualityControl.onPartBroken     += OnPartBroken;
            qualityControl.onPartFixed      += OnPartFixed;

            //Handle persistence case for broken part.
            if (isBroken)
            {
                OnPartBroken(qualityControl);
            }
        }
예제 #16
0
        public void OnPartFixed(BaseQualityControl moduleQualityControl)
        {
            isBroken = false;
            if (moduleSAS != null)
            {
                moduleSAS.enabled   = true;
                moduleSAS.isEnabled = true;
            }

            if (reactionWheel != null)
            {
                reactionWheel.enabled   = true;
                reactionWheel.isEnabled = true;
            }
        }
예제 #17
0
        public void SubscribeToEvents(BaseQualityControl moduleQualityControl)
        {
            debugLog("SubscribeToEvents");
            qualityControl = moduleQualityControl;
            qualityControl.onPartBroken           += OnPartBroken;
            qualityControl.onPartFixed            += OnPartFixed;
            qualityControl.onUpdateSettings       += onUpdateSettings;
            qualityControl.onMothballStateChanged += onMothballStateChanged;

            //Make sure we're broken
            if (isBroken)
            {
                OnPartBroken(qualityControl);
            }
        }
예제 #18
0
        public void SubscribeToEvents(BaseQualityControl moduleQualityControl)
        {
            debugLog("SubscribeToEvents");
            qualityControl = (ModuleQualityControl)moduleQualityControl;
            qualityControl.onUpdateSettings += onUpdateSettings;
            qualityControl.onPartBroken     += OnPartBroken;
            qualityControl.onPartFixed      += OnPartFixed;

            if (BARISScenario.showDebug && qualityControl.guiVisible)
            {
                Events["CreateSmallLeak"].guiActive  = true;
                Events["CreateMediumLeak"].guiActive = true;
                Events["CreateLargeLeak"].guiActive  = true;
            }
        }
예제 #19
0
        public void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            if (!BARISSettings.PartsCanBreak && !BARISBreakableParts.RCSCanFail)
            {
                return;
            }

            isBroken = true;

            //Cause the part to explode if we've fallen below the target number.
            if (explodeTargetNumber > -1)
            {
                if (qualityControl.lastQualityCheck.resultRoll <= explodeTargetNumber)
                {
                    //Send a message
                    if (this.part.vessel == FlightGlobals.ActiveVessel)
                    {
                        string message = Localizer.Format(this.part.partInfo.title + BARISScenario.CascadeFailureMsg);
                        BARISScenario.Instance.LogPlayerMessage(message);
                    }

                    this.part.explode();
                    return;
                }
            }

            //If we've suffered a critical failure and are supposed to explode, then do so.
            if (explodeOnCriticalFailure && qualityControl.lastQualityCheck.statusResult == QualityCheckStatus.criticalFail)
            {
                //Send a message
                if (this.part.vessel == FlightGlobals.ActiveVessel)
                {
                    string message = Localizer.Format(this.part.partInfo.title + BARISScenario.CascadeFailureMsg);
                    BARISScenario.Instance.LogPlayerMessage(message);
                }

                this.part.explode();
                return;
            }

            //Disable all the part modules we're supposed to.
            foreach (PartModule partModule in breakablePartModules)
            {
                partModule.enabled         = false;
                partModule.isEnabled       = false;
                partModule.moduleIsEnabled = false;
            }
        }
예제 #20
0
        public void SubscribeToEvents(BaseQualityControl moduleQualityControl)
        {
            debugLog("SubscribeToEvents");
            qualityControl = (ModuleQualityControl)moduleQualityControl;
            qualityControl.onUpdateSettings         += onUpdateSettings;
            qualityControl.onPartBroken             += OnPartBroken;
            qualityControl.onPartFixed              += OnPartFixed;
            BARISScenario.Instance.onThrottleUpDown += onThrottleUpDown;

            if (BARISScenario.showDebug && qualityControl.guiVisible)
            {
                Events["ExplodeEngine"].guiActive       = true;
                Events["EngineStuckOn"].guiActive       = true;
                Events["ShutdownEngine"].guiActive      = true;
                Events["GenerateFailureMode"].guiActive = true;
            }
        }
예제 #21
0
        public void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            if (!BARISSettings.PartsCanBreak && !BARISBridge.RCSCanFail)
            {
                return;
            }

            isBroken = true;
            rcsModule.moduleIsEnabled = true;

            if (this.part.vessel == FlightGlobals.ActiveVessel)
            {
                string message = Localizer.Format(this.part.partInfo.title + BARISScenario.RCSBroken);
                BARISScenario.Instance.LogPlayerMessage(message);
            }

            qualityControl.UpdateQualityDisplay(qualityControl.qualityDisplay + Localizer.Format(BARISScenario.RCSLabel));
        }
예제 #22
0
        public void OnPartFixed(BaseQualityControl moduleQualityControl)
        {
            ModuleEngines[] engines = multiModeEngines.Values.ToArray();

            //Restore engine state
            isStuckOn = false;

            for (int index = 0; index < engines.Length; index++)
            {
                engines[index].currentThrottle = FlightInputHandler.state.mainThrottle;
                engines[index].allowShutdown   = allowShutdown[index];
                engines[index].throttleLocked  = throttleLocked[index];
            }

            //Reset failure mode
            failureMode   = BARRISEngineFailureModes.None;
            failureModeID = 0;
            BARISScenario.Instance.onTimeTickEvent -= failureModeTimeTick;
        }
예제 #23
0
        public virtual void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            if (!BARISBridge.ConvertersCanFail)
            {
                return;
            }

            isBroken    = true;
            IsActivated = false;

            //Generate a failure mode

            if (this.part.vessel == FlightGlobals.ActiveVessel)
            {
                string message = Localizer.Format(this.part.partInfo.title + partBrokenMessage);
                BARISBridge.LogPlayerMessage(message);
            }
            qualityControl.UpdateQualityDisplay(qualityControl.qualityDisplay + Localizer.Format(partBrokenLabel));
        }
예제 #24
0
        public void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            if (!BARISSettings.PartsCanBreak || !BARISBreakableParts.TanksCanFail)
            {
                return;
            }

            //If we're out of MTBF and we suffered a critical failure, then dump resources or blow up the part.
            if (qualityControl.lastQualityCheck.statusResult == QualityCheckStatus.criticalFail)
            {
                DumpResources();
            }

            //Generate a resource leak.
            else
            {
                leakedUnitsPerSec += CalculateLeakRate();
                BARISScenario.Instance.onTimeTickEvent += leakTimeTick;
            }
        }
예제 #25
0
        public void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            if (!BARISSettings.PartsCanBreak || !BARISBridge.TransmittersCanFail)
            {
                return;
            }

            isBroken = true;
            if (transmitter.IsBusy())
            {
                transmitter.StopTransmission();
            }
            transmitter.enabled   = false;
            transmitter.isEnabled = false;

            if (this.part.vessel == FlightGlobals.ActiveVessel)
            {
                string message = Localizer.Format(this.part.partInfo.title + BARISScenario.TransmitterBroken);
                BARISScenario.Instance.LogPlayerMessage(message);
            }
            qualityControl.UpdateQualityDisplay(qualityControl.qualityDisplay + Localizer.Format(BARISScenario.TransmitterLabel));
        }
예제 #26
0
        public void OnPartBroken(BaseQualityControl moduleQualityControl)
        {
            if (!BARISBridge.PartsCanBreak || !BARISBridge.EnginesCanFail)
            {
                return;
            }

            //Record state
            isBroken = true;

            //If the chute is deployed then cut the chute
            string message        = string.Empty;
            string qualityDisplay = string.Empty;

            if (deploymentState == deploymentStates.DEPLOYED || deploymentState == deploymentStates.SEMIDEPLOYED)
            {
                CutParachute();

                //Player messages
                message        = this.part.partInfo.title + " chute cut!";
                qualityDisplay = "Broken";
            }
            else
            {
                //The chute cannot deploy
                message        = this.part.partInfo.title + " cannot deploy chute!";
                qualityDisplay = " stuck";
                ;
            }

            //Inform player
            qualityControl.UpdateQualityDisplay(qualityControl.qualityDisplay + qualityDisplay);
            if (this.part.vessel == FlightGlobals.ActiveVessel)
            {
                BARISScenario.Instance.LogPlayerMessage(message);
            }
        }
예제 #27
0
 public virtual void OnPartFixed(BaseQualityControl moduleQualityControl)
 {
     isBroken = false;
 }
예제 #28
0
 protected void onUpdateSettings(BaseQualityControl moduleQualityControl)
 {
     Events["CreateSmallLeak"].guiActive  = BARISScenario.showDebug;
     Events["CreateMediumLeak"].guiActive = BARISScenario.showDebug;
     Events["CreateLargeLeak"].guiActive  = BARISScenario.showDebug;
 }
예제 #29
0
 public override void OnPartFixed(BaseQualityControl qualityControl)
 {
     base.OnPartFixed(qualityControl);
     SetupGUI();
 }
예제 #30
0
        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));
            }
        }