diff --git a/FerramAerospaceResearch/RealChuteLite/RealChuteFAR.cs b/FerramAerospaceResearch/RealChuteLite/RealChuteFAR.cs index 595ea327..615076e7 100644 --- a/FerramAerospaceResearch/RealChuteLite/RealChuteFAR.cs +++ b/FerramAerospaceResearch/RealChuteLite/RealChuteFAR.cs @@ -90,13 +90,17 @@ public enum SafeState public float autoCutSpeed = 0.5f; [KSPField(guiName = "RCLSettingMinPres", isPersistant = true, guiActive = true, guiActiveEditor = true), - UI_FloatRange(stepIncrement = 0.01f, maxValue = 0.5f, minValue = 0.01f)] + UI_FloatRange(stepIncrement = 0.01f, maxValue = 0.75f, minValue = 0.01f)] public float minAirPressureToOpen = 0.01f; [KSPField(guiName = "RCLSettingAlt", isPersistant = true, guiActive = true, guiActiveEditor = true), UI_FloatRange(stepIncrement = 50f, maxValue = 5000f, minValue = 50f)] public float deployAltitude = 700; + [KSPField(guiName = "RCLSettingDelopyMode", isPersistant = true, guiActive = true, guiActiveEditor = true), + UI_Cycle(stateNames = new string[] { "RCLDeployModeSafe", "RCLDeployModeRisky", "RCLDeployModeImmediate" })] + public int deployMode = 0; + [KSPField] public string capName = "cap", canopyName = "canopy"; @@ -268,6 +272,10 @@ public bool PressureCheck get { return atmPressure >= minAirPressureToOpen; } } + public bool SafetyCheck { + get { return deployMode >= (int) safeState; } + } + //If the parachute can deploy public bool CanDeploy { @@ -386,6 +394,20 @@ private BaseEvent Repack get { return repack ??= Events["GUIRepack"]; } } + private string DeployModeStr + { + get { + if (deployMode == 0) { + return Localizer.Format("RCLDeployModeSafe"); + } else if (deployMode == 1) { + return Localizer.Format("RCLDeployModeRisky"); + } else { + return Localizer.Format("RCLDeployModeImmediate"); + } + + } + } + //Not needed public Callback GetDrawModulePanelCallback() { @@ -413,19 +435,20 @@ public override string GetInfo() massDelta = tmpPartMass - part.partInfo.partPrefab.mass; var b = new StringBuilder(); - b.Append(Localizer.Format("RCLModuleInfo0", caseMass)); - b.Append(Localizer.Format("RCLModuleInfo1", maxSpares)); - b.Append(Localizer.Format("RCLModuleInfo2", autoCutSpeed)); - b.AppendLine(Localizer.Format("RCLModuleInfo3", materialName)); - b.Append(Localizer.Format("RCLModuleInfo4", staticCd)); - b.Append(Localizer.Format("RCLModuleInfo5", maxTemp + absoluteZero)); - b.Append(Localizer.Format("RCLModuleInfo6", preDeployedDiameter)); - b.Append(Localizer.Format("RCLModuleInfo7", deployedDiameter)); - b.Append(Localizer.Format("RCLModuleInfo8", minAirPressureToOpen)); - b.Append(Localizer.Format("RCLModuleInfo9", deployAltitude)); - b.Append(Localizer.Format("RCLModuleInfo10", + b.Append(Localizer.Format("RCLModuleInfoCaseMass", caseMass)); + b.Append(Localizer.Format("RCLModuleInfoSpares", maxSpares)); + b.Append(Localizer.Format("RCLModuleInfoMaterialAutocutSpeed", autoCutSpeed)); + b.AppendLine(Localizer.Format("RCLModuleInfoMaterial", materialName)); + b.Append(Localizer.Format("RCLModuleInfoDragCoefficient", staticCd)); + b.Append(Localizer.Format("RCLModuleInfoMaxTemp", maxTemp + absoluteZero)); + b.Append(Localizer.Format("RCLModuleInfoPredeployedDiameter", preDeployedDiameter)); + b.Append(Localizer.Format("RCLModuleInfoDeployedDiameter", deployedDiameter)); + b.Append(Localizer.Format("RCLModuleInfoMinDeploymentPressure", minAirPressureToOpen)); + b.Append(Localizer.Format("RCLModuleInfoDeploymentAltitude", deployAltitude)); + b.Append(Localizer.Format("RCLModuleInfoDeploymentMode", DeployModeStr)); + b.Append(Localizer.Format("RCLModuleInfoPredeploymentSpeed", Math.Round(1 / semiDeploymentSpeed, 1, MidpointRounding.AwayFromZero))); - b.Append(Localizer.Format("RCLModuleInfo11", + b.Append(Localizer.Format("RCLModuleInfoDeploymentSpeed", Math.Round(1 / deploymentSpeed, 1, MidpointRounding.AwayFromZero))); return b.ToString(); @@ -661,6 +684,7 @@ private void CopyToCounterparts() var module = (RealChuteFAR)p.Modules["RealChuteFAR"]; module.minAirPressureToOpen = minAirPressureToOpen; module.deployAltitude = deployAltitude; + module.deployMode = deployMode; } } @@ -963,6 +987,17 @@ private void Window(int windowId) //Deployment altitude slider deployAltitude = GUILayout.HorizontalSlider(deployAltitude, 50, 10000); + //Deployment mode selection + GUILayout.Label(Localizer.Format("RCLGUIDeploymentMode", DeployModeStr)); + if (HighLogic.LoadedSceneIsFlight) + //Deployment mode grid + deployMode = GUILayout.SelectionGrid(deployMode, new string[] { + Localizer.Format("RCLDeployModeSafe"), + Localizer.Format("RCLDeployModeRisky"), + Localizer.Format("RCLDeployModeImmediate") + }, 3); + + //Other labels b = new StringBuilder(); b.AppendLine(Localizer.Format("RCLGUI15", @@ -1106,7 +1141,7 @@ private void FixedUpdate() case DeploymentStates.STOWED: { part.stackIcon.SetIconColor(XKCDColors.LightCyan); - if (PressureCheck && RandomDeployment) + if (SafetyCheck && PressureCheck && RandomDeployment) PreDeploy(); break; } diff --git a/GameData/FerramAerospaceResearch/Localization/Localization.cfg b/GameData/FerramAerospaceResearch/Localization/Localization.cfg index 55d43456..22cb6f9a 100644 --- a/GameData/FerramAerospaceResearch/Localization/Localization.cfg +++ b/GameData/FerramAerospaceResearch/Localization/Localization.cfg @@ -380,37 +380,43 @@ RCLStatusDep = DEPLOYED RCLStatusCut = CUT - RCLSettingMinPres = Min pressure + RCLSettingMinPres = Min Pressure RCLSettingAlt = Altitude\t\t + RCLSettingDelopyMode = Deploy Mode RCLStatusSpare = Spare chutes RCLStatusChuteTemp = Chute temp RCLTempUnit = °C RCLStatusMaxTemp = Max temp - RCLEventDeploy = Deploy chute - RCLEventCut = Cut chute - RCLEventDisarm = Disarm chute - RCLEventRepack = Repack chute - RCLEventToggleInfo = Toggle info + RCLEventDeploy = Deploy Chute + RCLEventCut = Cut Parachute + RCLEventDisarm = Disarm + RCLEventRepack = Repack Chute + RCLEventToggleInfo = Toggle Info RCLModuleTitle = RealChute - RCLModuleInfo0 = Case mass: <<1>>\n - RCLModuleInfo1 = Spare chutes: <<1>>\n - RCLModuleInfo2 = Autocut speed: <<1>>m/s\n - RCLModuleInfo3 = Parachute material: <<1>> - RCLModuleInfo4 = Drag coefficient: <<1>>\n - RCLModuleInfo5 = Chute max temperature: <<1>>°C\n - RCLModuleInfo6 = Predeployed diameter: <<1>>m\n - RCLModuleInfo7 = Deployed diameter: <<1>>m\n - RCLModuleInfo8 = Minimum deployment pressure: <<1>>atm\n - RCLModuleInfo9 = Deployment altitude: <<1>>m\n - RCLModuleInfo10 = Predeployment speed: <<1>>s\n - RCLModuleInfo11 = Deployment speed: <<1>>s\n + RCLModuleInfoCaseMass = Case mass: <<1>>\n + RCLModuleInfoSpares = Spare chutes: <<1>>\n + RCLModuleInfoMaterialAutocutSpeed = Autocut speed: <<1>>m/s\n + RCLModuleInfoMaterial = Parachute material: <<1>> + RCLModuleInfoDragCoefficient = Drag coefficient: <<1>>\n + RCLModuleInfoMaxTemp = Chute max temperature: <<1>>°C\n + RCLModuleInfoPredeployedDiameter = Predeployed diameter: <<1>>m\n + RCLModuleInfoDeployedDiameter = Deployed diameter: <<1>>m\n + RCLModuleInfoMinDeploymentPressure = Minimum deployment pressure: <<1>>atm\n + RCLModuleInfoDeploymentAltitude = Deployment altitude: <<1>>m\n + RCLModuleInfoDeploymentMode = Deployment mode: <<1>>\n + RCLModuleInfoPredeploymentSpeed = Predeployment speed: <<1>>s\n + RCLModuleInfoDeploymentSpeed = Deployment speed: <<1>>s\n RCLRepackErrorMessage = Only a level 1 and higher engineer can repack a parachute RCLDestroyMessage = [RealChute]: <<1>>'s parachute has been destroyed due to aero forces and heat. + RCLDeployModeSafe = When Safe + RCLDeployModeRisky = When Risky + RCLDeployModeImmediate = Immediate + RCLGUITitle = RealChute Info Window RCLGUI0 = Part name: <<1>> RCLGUI1 = Symmetry counterparts: <<1>> @@ -440,6 +446,8 @@ RCLGUI15 = Predeployment speed: <<1>>s RCLGUI16 = Deployment speed: <<1>>s + RCLGUIDeploymentMode = Deployment mode: <<1>> + RCLGUICopy = Copy to others chutes RCLGUIClose = Close diff --git a/GameData/FerramAerospaceResearch/Localization/Localization_de-de.cfg b/GameData/FerramAerospaceResearch/Localization/Localization_de-de.cfg index 617084eb..4a69aa08 100644 --- a/GameData/FerramAerospaceResearch/Localization/Localization_de-de.cfg +++ b/GameData/FerramAerospaceResearch/Localization/Localization_de-de.cfg @@ -402,18 +402,18 @@ Localization RCLModuleTitle = RealChute - RCLModuleInfo0 = Gewicht Gehäuse: <<1>>\n - RCLModuleInfo1 = Vfg. Schirme: <<1>>\n - RCLModuleInfo2 = Auto Schnitttmepo: <<1>>m/s\n - RCLModuleInfo3 = Fallschirm Material: <<1>> - RCLModuleInfo4 = Drag Koeffizient: <<1>>\n - RCLModuleInfo5 = Max Schirm Temperatur: <<1>>°C\n - RCLModuleInfo6 = Durchmesser teilgeöffnet: <<1>>m\n - RCLModuleInfo7 = Durchmesser geöffnet: <<1>>m\n - RCLModuleInfo8 = Min Druck für Öffnung: <<1>>atm\n - RCLModuleInfo9 = Einsatzhöhe: <<1>>m\n - RCLModuleInfo10 = Tempo bei Teilöffnung: <<1>>s\n - RCLModuleInfo11 = Tempo bei Öffnung: <<1>>s\n + RCLModuleInfoCaseMass = Gewicht Gehäuse: <<1>>\n + RCLModuleInfoSpares = Vfg. Schirme: <<1>>\n + RCLModuleInfoMaterialAutocutSpeed = Auto Schnitttmepo: <<1>>m/s\n + RCLModuleInfoMaterial = Fallschirm Material: <<1>> + RCLModuleInfoDragCoefficient = Drag Koeffizient: <<1>>\n + RCLModuleInfoMaxTemp = Max Schirm Temperatur: <<1>>°C\n + RCLModuleInfoPredeployedDiameter = Durchmesser teilgeöffnet: <<1>>m\n + RCLModuleInfoDeployedDiameter = Durchmesser geöffnet: <<1>>m\n + RCLModuleInfoMinDeploymentPressure = Min Druck für Öffnung: <<1>>atm\n + RCLModuleInfoDeploymentAltitude = Einsatzhöhe: <<1>>m\n + RCLModuleInfoPredeploymentSpeed = Tempo bei Teilöffnung: <<1>>s\n + RCLModuleInfoDeploymentSpeed = Tempo bei Öffnung: <<1>>s\n RCLRepackErrorMessage = Nur ein Ingenieur mit Level 1 aufwärts kann einen Fallschirm packen RCLDestroyMessage = [RealChute]: Fallschirm von <<1>>wurde durch Aerokräfte und Hitze zerstört. diff --git a/GameData/FerramAerospaceResearch/Localization/Localization_ru.cfg b/GameData/FerramAerospaceResearch/Localization/Localization_ru.cfg index 7d467015..bab47782 100644 --- a/GameData/FerramAerospaceResearch/Localization/Localization_ru.cfg +++ b/GameData/FerramAerospaceResearch/Localization/Localization_ru.cfg @@ -378,18 +378,18 @@ RCLModuleTitle = RealChute - RCLModuleInfo0 = Масса контейнера: <<1>>\n - RCLModuleInfo1 = Запасных куполов: <<1>>\n - RCLModuleInfo2 = Скорость автоотцепки: <<1>>м/с\n - RCLModuleInfo3 = Материал купола: <<1>> - RCLModuleInfo4 = Коэфф. сопр-я: <<1>>\n - RCLModuleInfo5 = Термостойкость купола: <<1>>°C\n - RCLModuleInfo6 = Диаметр вытянутого: <<1>>м\n - RCLModuleInfo7 = Диаметр раскрытого: <<1>>м\n - RCLModuleInfo8 = Мин. давление раскрытия: <<1>>атм\n - RCLModuleInfo9 = Высота раскрытия: <<1>>м\n - RCLModuleInfo10 = Скорость выпуска: <<1>>с\n - RCLModuleInfo11 = Скорость раскрытия: <<1>>с\n + RCLModuleInfoCaseMass = Масса контейнера: <<1>>\n + RCLModuleInfoSpares = Запасных куполов: <<1>>\n + RCLModuleInfoMaterialAutocutSpeed = Скорость автоотцепки: <<1>>м/с\n + RCLModuleInfoMaterial = Материал купола: <<1>> + RCLModuleInfoDragCoefficient = Коэфф. сопр-я: <<1>>\n + RCLModuleInfoMaxTemp = Термостойкость купола: <<1>>°C\n + RCLModuleInfoPredeployedDiameter = Диаметр вытянутого: <<1>>м\n + RCLModuleInfoDeployedDiameter = Диаметр раскрытого: <<1>>м\n + RCLModuleInfoMinDeploymentPressure = Мин. давление раскрытия: <<1>>атм\n + RCLModuleInfoDeploymentAltitude = Высота раскрытия: <<1>>м\n + RCLModuleInfoPredeploymentSpeed = Скорость выпуска: <<1>>с\n + RCLModuleInfoDeploymentSpeed = Скорость раскрытия: <<1>>с\n RCLRepackErrorMessage = Для укладки парашюта требуется инженер уровня 1 и выше RCLDestroyMessage = [RealChute]: Обрыв парашюта на аппарате "<<1>>" из-за аэродинамических нагрузок и перегрева diff --git a/GameData/FerramAerospaceResearch/Localization/Localization_zh-cn.cfg b/GameData/FerramAerospaceResearch/Localization/Localization_zh-cn.cfg index b93fdf2b..ccd1245c 100644 --- a/GameData/FerramAerospaceResearch/Localization/Localization_zh-cn.cfg +++ b/GameData/FerramAerospaceResearch/Localization/Localization_zh-cn.cfg @@ -396,18 +396,18 @@ RCLModuleTitle = RealChute - RCLModuleInfo0 = 质量: <<1>>\n - RCLModuleInfo1 = 备用伞: <<1>>\n - RCLModuleInfo2 = 自动切断速度: <<1>>m/s\n - RCLModuleInfo3 = 降落伞材料: <<1>> - RCLModuleInfo4 = 阻力系数: <<1>>\n - RCLModuleInfo5 = 降落伞最高温度: <<1>>°C\n - RCLModuleInfo6 = 预展开直径: <<1>>m\n - RCLModuleInfo7 = 展开直径: <<1>>m\n - RCLModuleInfo8 = 最低展开气压: <<1>>atm\n - RCLModuleInfo9 = 展开高度: <<1>>m\n - RCLModuleInfo10 = 预展开速度: <<1>>s\n - RCLModuleInfo11 = 展开速度: <<1>>s\n + RCLModuleInfoCaseMass = 质量: <<1>>\n + RCLModuleInfoSpares = 备用伞: <<1>>\n + RCLModuleInfoMaterialAutocutSpeed = 自动切断速度: <<1>>m/s\n + RCLModuleInfoMaterial = 降落伞材料: <<1>> + RCLModuleInfoDragCoefficient = 阻力系数: <<1>>\n + RCLModuleInfoMaxTemp = 降落伞最高温度: <<1>>°C\n + RCLModuleInfoPredeployedDiameter = 预展开直径: <<1>>m\n + RCLModuleInfoDeployedDiameter = 展开直径: <<1>>m\n + RCLModuleInfoMinDeploymentPressure = 最低展开气压: <<1>>atm\n + RCLModuleInfoDeploymentAltitude = 展开高度: <<1>>m\n + RCLModuleInfoPredeploymentSpeed = 预展开速度: <<1>>s\n + RCLModuleInfoDeploymentSpeed = 展开速度: <<1>>s\n RCLRepackErrorMessage = 只有1级以上的工程师能重新打包降落伞 RCLDestroyMessage = [RealChute]: <<1>>的降落伞因为气动和过热而损毁了.