private void DecideNewState(EngineIgnitionState oldState) { if (_engine.EngineIgnited) { Log.Info("DecidenewState, oldState: " + oldState + ", _engine.requestedThrottle: " + _engine.requestedThrottle + ", _engine.EngineIgnited: " + _engine.EngineIgnited + ", _engine.allowShutdown: " + _engine.allowShutdown); } if ((_engine.requestedThrottle <= 0.0f && !MultiModeEngine) || _engine.flameout || (_engine.EngineIgnited == false && _engine.allowShutdown)) { if (_engine.part.temperature >= AutoIgnitionTemperature) { _engineState = EngineIgnitionState.HIGH_TEMP; } else { _engineState = EngineIgnitionState.NOT_IGNITED; } } else { if (oldState != EngineIgnitionState.IGNITED) { //When changing from not-ignited to ignited, we must ensure that the throttle is non-zero or locked (SRBs) if (vessel.ctrlState.mainThrottle > 0.0f || _engine.throttleLocked) { _engineState = EngineIgnitionState.IGNITED; autoShutdown = false; } else { _engineState = EngineIgnitionState.NOT_IGNITED; } } } }
private bool IgnitionProcess(EngineIgnitionState oldState, bool isExternal) //, List<OnboardIgnitorResource> aaa) { Log.Info("IgnitionProcess, oldState: " + oldState + ", _engineState: " + _engineState + ", isExternal: " + isExternal); if (DontUseIgnitorIfMultiModeOn && OtherEngineModeActive()) { _engineState = EngineIgnitionState.IGNITED; autoShutdown = false; Log.Info("IgnitionProcess, engine already ignited"); return(true); } if (oldState == EngineIgnitionState.NOT_IGNITED && _engineState == EngineIgnitionState.IGNITED) { if (isExternal) { return(true); } Log.Info("IgnitionProcess, IgnitionsRemained: " + IgnitionsRemained + ", ECforIgnition: " + ECforIgnition + ", MultiModeEngine: " + MultiModeEngine + ", CurrentActiveMode: " + CurrentActiveMode()); if (!MultiModeEngine || (MultiModeEngine && !OtherEngineModeActive()) || CurrentActiveMode() == EngineIndex) { if (IgnitionsRemained > 0 || IgnitionsRemained == -1) { double ec = 0; if (EnoughECforIgnition()) { ec = part.RequestResource(ecId, (double)ECforIgnition); if (ec != ECforIgnition) { ScreenMessages.PostScreenMessage("Do not have enough Electrical Charge", 3f, ScreenMessageStyle.UPPER_CENTER); _engineState = EngineIgnitionState.NOT_IGNITED; return(false); } } IgnitionsRemained--; } else { _engineState = EngineIgnitionState.NOT_IGNITED; return(false); } } float minPotential = 1.0f; if (UseUllageSimulation) { minPotential *= _oldFuelFlowStability; var chance = UnityEngine.Random.Range(0.0f, 1.0f); var attempt = chance <= minPotential; Debug.Log("EngineIgnitor: minPotential: " + minPotential.ToString() + ", chance: " + chance.ToString()); ScreenMessages.PostScreenMessage("Chance of ignition success: " + minPotential + ", Random: " + chance.ToString(), 5, ScreenMessageStyle.UPPER_CENTER); if (!attempt) { ScreenMessages.PostScreenMessage("Ignition failed due to fuel flow instability", 3f, ScreenMessageStyle.UPPER_CENTER); _engineState = EngineIgnitionState.NOT_IGNITED; return(false); } } } if (oldState == EngineIgnitionState.HIGH_TEMP && _engineState == EngineIgnitionState.IGNITED) { _engineState = EngineIgnitionState.IGNITED; autoShutdown = false; return(true); } return(true); }
private void FixedUpdate() { if (_engine == null) { Log.Info("ModuleEngineIgnitor.Update, _engine == null"); } else { Log.Info("ModuleEngineIgnitor.Update, _engine.allowShutdown: " + _engine.allowShutdown); } if (!HighLogic.LoadedSceneIsFlight || _engine == null || !_engine.allowShutdown) { return; } if (vessel.Landed) { IsExternal = CheckExternalIgnitor(); if (IsExternal) { IgnitionsAvailableString = "Provided from Ground" + " : [ " + IgnitionsRemained + "/" + IgnitionsAvailable + " ]"; } else { if (IgnitionsRemained != -1) { IgnitionsAvailableString = IgnitorType + " : [ " + IgnitionsRemained + "/" + IgnitionsAvailable + " ]"; } else { IgnitionsAvailableString = "Unlimited"; } } } else { IsExternal = false; if (IgnitionsRemained != -1) { IgnitionsAvailableString = IgnitorType + " : [ " + IgnitionsRemained + "/" + IgnitionsAvailable + " ]"; } else { IgnitionsAvailableString = "Unlimited"; } } if (part != null) { AutoIgnitionState = part.temperature.ToString("F1") + "/" + AutoIgnitionTemperature.ToString("F1"); } else { AutoIgnitionState = "?/" + AutoIgnitionTemperature.ToString("F1"); } if (FlightGlobals.ActiveVessel != null) { Events["ReloadIgnitor"].guiActiveUnfocused = FlightGlobals.ActiveVessel.isEVA; Events["ReloadIgnitor"].guiName = "Reload Ignitor (" + IgnitionsAvailableString + ")"; } var oldState = _engineState; DecideNewState(oldState); Log.Info("oldEngineThrottle: " + oldEngineThrottle + ", autoShutdown: " + autoShutdown); if (_engine.requestedThrottle > 0.0f) { autoShutdown = false; } else { if (!autoShutdown) { _engineState = EngineIgnitionState.NOT_IGNITED; autoShutdown = true; } } _oldFuelFlowStability = _fuelFlowStability; CheckUllageState(); var isIgnited = IgnitionProcess(oldState, IsExternal); //, totalRes); IgnitionResult(IsExternal, isIgnited); }