Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 49 additions & 14 deletions FerramAerospaceResearch/RealChuteLite/RealChuteFAR.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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";

Expand Down Expand Up @@ -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
{
Expand Down Expand Up @@ -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<Rect> GetDrawModulePanelCallback()
{
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -661,6 +684,7 @@ private void CopyToCounterparts()
var module = (RealChuteFAR)p.Modules["RealChuteFAR"];
module.minAirPressureToOpen = minAirPressureToOpen;
module.deployAltitude = deployAltitude;
module.deployMode = deployMode;
}
}

Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -1106,7 +1141,7 @@ private void FixedUpdate()
case DeploymentStates.STOWED:
{
part.stackIcon.SetIconColor(XKCDColors.LightCyan);
if (PressureCheck && RandomDeployment)
if (SafetyCheck && PressureCheck && RandomDeployment)
PreDeploy();
break;
}
Expand Down
44 changes: 26 additions & 18 deletions GameData/FerramAerospaceResearch/Localization/Localization.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -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 = <b>Case mass:</b> <<1>>\n
RCLModuleInfo1 = <b>Spare chutes:</b> <<1>>\n
RCLModuleInfo2 = <b>Autocut speed:</b> <<1>>m/s\n
RCLModuleInfo3 = <b>Parachute material:</b> <<1>>
RCLModuleInfo4 = <b>Drag coefficient:</b> <<1>>\n
RCLModuleInfo5 = <b>Chute max temperature:</b> <<1>>°C\n
RCLModuleInfo6 = <b>Predeployed diameter:</b> <<1>>m\n
RCLModuleInfo7 = <b>Deployed diameter:</b> <<1>>m\n
RCLModuleInfo8 = <b>Minimum deployment pressure:</b> <<1>>atm\n
RCLModuleInfo9 = <b>Deployment altitude:</b> <<1>>m\n
RCLModuleInfo10 = <b>Predeployment speed:</b> <<1>>s\n
RCLModuleInfo11 = <b>Deployment speed:</b> <<1>>s\n
RCLModuleInfoCaseMass = <b>Case mass:</b> <<1>>\n
RCLModuleInfoSpares = <b>Spare chutes:</b> <<1>>\n
RCLModuleInfoMaterialAutocutSpeed = <b>Autocut speed:</b> <<1>>m/s\n
RCLModuleInfoMaterial = <b>Parachute material:</b> <<1>>
RCLModuleInfoDragCoefficient = <b>Drag coefficient:</b> <<1>>\n
RCLModuleInfoMaxTemp = <b>Chute max temperature:</b> <<1>>°C\n
RCLModuleInfoPredeployedDiameter = <b>Predeployed diameter:</b> <<1>>m\n
RCLModuleInfoDeployedDiameter = <b>Deployed diameter:</b> <<1>>m\n
RCLModuleInfoMinDeploymentPressure = <b>Minimum deployment pressure:</b> <<1>>atm\n
RCLModuleInfoDeploymentAltitude = <b>Deployment altitude:</b> <<1>>m\n
RCLModuleInfoDeploymentMode = <b>Deployment mode:</b> <<1>>\n
RCLModuleInfoPredeploymentSpeed = <b>Predeployment speed:</b> <<1>>s\n
RCLModuleInfoDeploymentSpeed = <b>Deployment speed:</b> <<1>>s\n

RCLRepackErrorMessage = Only a level 1 and higher engineer can repack a parachute
RCLDestroyMessage = <color=orange>[RealChute]: <<1>>'s parachute has been destroyed due to aero forces and heat.</color>

RCLDeployModeSafe = When Safe
RCLDeployModeRisky = When Risky
RCLDeployModeImmediate = Immediate

RCLGUITitle = RealChute Info Window
RCLGUI0 = Part name: <<1>>
RCLGUI1 = Symmetry counterparts: <<1>>
Expand Down Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -402,18 +402,18 @@ Localization

RCLModuleTitle = RealChute

RCLModuleInfo0 = <b>Gewicht Gehäuse</b>: <<1>>\n
RCLModuleInfo1 = <b>Vfg. Schirme</b>: <<1>>\n
RCLModuleInfo2 = <b>Auto Schnitttmepo</b>: <<1>>m/s\n
RCLModuleInfo3 = <b>Fallschirm Material</b>: <<1>>
RCLModuleInfo4 = <b>Drag Koeffizient</b>: <<1>>\n
RCLModuleInfo5 = <b>Max Schirm Temperatur</b>: <<1>>°C\n
RCLModuleInfo6 = <b>Durchmesser teilgeöffnet</b>: <<1>>m\n
RCLModuleInfo7 = <b>Durchmesser geöffnet</b>: <<1>>m\n
RCLModuleInfo8 = <b>Min Druck für Öffnung</b>: <<1>>atm\n
RCLModuleInfo9 = <b>Einsatzhöhe</b>: <<1>>m\n
RCLModuleInfo10 = <b>Tempo bei Teilöffnung</b>: <<1>>s\n
RCLModuleInfo11 = <b>Tempo bei Öffnung</b>: <<1>>s\n
RCLModuleInfoCaseMass = <b>Gewicht Gehäuse</b>: <<1>>\n
RCLModuleInfoSpares = <b>Vfg. Schirme</b>: <<1>>\n
RCLModuleInfoMaterialAutocutSpeed = <b>Auto Schnitttmepo</b>: <<1>>m/s\n
RCLModuleInfoMaterial = <b>Fallschirm Material</b>: <<1>>
RCLModuleInfoDragCoefficient = <b>Drag Koeffizient</b>: <<1>>\n
RCLModuleInfoMaxTemp = <b>Max Schirm Temperatur</b>: <<1>>°C\n
RCLModuleInfoPredeployedDiameter = <b>Durchmesser teilgeöffnet</b>: <<1>>m\n
RCLModuleInfoDeployedDiameter = <b>Durchmesser geöffnet</b>: <<1>>m\n
RCLModuleInfoMinDeploymentPressure = <b>Min Druck für Öffnung</b>: <<1>>atm\n
RCLModuleInfoDeploymentAltitude = <b>Einsatzhöhe</b>: <<1>>m\n
RCLModuleInfoPredeploymentSpeed = <b>Tempo bei Teilöffnung</b>: <<1>>s\n
RCLModuleInfoDeploymentSpeed = <b>Tempo bei Öffnung</b>: <<1>>s\n

RCLRepackErrorMessage = Nur ein Ingenieur mit Level 1 aufwärts kann einen Fallschirm packen
RCLDestroyMessage = <color=orange>[RealChute]: Fallschirm von <<1>>wurde durch Aerokräfte und Hitze zerstört.</color>
Expand Down
24 changes: 12 additions & 12 deletions GameData/FerramAerospaceResearch/Localization/Localization_ru.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -378,18 +378,18 @@

RCLModuleTitle = RealChute

RCLModuleInfo0 = <b>Масса контейнера</b>: <<1>>\n
RCLModuleInfo1 = <b>Запасных куполов</b>: <<1>>\n
RCLModuleInfo2 = <b>Скорость автоотцепки</b>: <<1>>м/с\n
RCLModuleInfo3 = <b>Материал купола</b>: <<1>>
RCLModuleInfo4 = <b>Коэфф. сопр-я</b>: <<1>>\n
RCLModuleInfo5 = <b>Термостойкость купола</b>: <<1>>°C\n
RCLModuleInfo6 = <b>Диаметр вытянутого</b>: <<1>>м\n
RCLModuleInfo7 = <b>Диаметр раскрытого</b>: <<1>>м\n
RCLModuleInfo8 = <b>Мин. давление раскрытия</b>: <<1>>атм\n
RCLModuleInfo9 = <b>Высота раскрытия</b>: <<1>>м\n
RCLModuleInfo10 = <b>Скорость выпуска</b>: <<1>>с\n
RCLModuleInfo11 = <b>Скорость раскрытия</b>: <<1>>с\n
RCLModuleInfoCaseMass = <b>Масса контейнера</b>: <<1>>\n
RCLModuleInfoSpares = <b>Запасных куполов</b>: <<1>>\n
RCLModuleInfoMaterialAutocutSpeed = <b>Скорость автоотцепки</b>: <<1>>м/с\n
RCLModuleInfoMaterial = <b>Материал купола</b>: <<1>>
RCLModuleInfoDragCoefficient = <b>Коэфф. сопр-я</b>: <<1>>\n
RCLModuleInfoMaxTemp = <b>Термостойкость купола</b>: <<1>>°C\n
RCLModuleInfoPredeployedDiameter = <b>Диаметр вытянутого</b>: <<1>>м\n
RCLModuleInfoDeployedDiameter = <b>Диаметр раскрытого</b>: <<1>>м\n
RCLModuleInfoMinDeploymentPressure = <b>Мин. давление раскрытия</b>: <<1>>атм\n
RCLModuleInfoDeploymentAltitude = <b>Высота раскрытия</b>: <<1>>м\n
RCLModuleInfoPredeploymentSpeed = <b>Скорость выпуска</b>: <<1>>с\n
RCLModuleInfoDeploymentSpeed = <b>Скорость раскрытия</b>: <<1>>с\n

RCLRepackErrorMessage = Для укладки парашюта требуется инженер уровня 1 и выше
RCLDestroyMessage = <color=orange>[RealChute]: Обрыв парашюта на аппарате "<<1>>" из-за аэродинамических нагрузок и перегрева</color>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -396,18 +396,18 @@

RCLModuleTitle = RealChute

RCLModuleInfo0 = <b>质量</b>: <<1>>\n
RCLModuleInfo1 = <b>备用伞</b>: <<1>>\n
RCLModuleInfo2 = <b>自动切断速度</b>: <<1>>m/s\n
RCLModuleInfo3 = <b>降落伞材料</b>: <<1>>
RCLModuleInfo4 = <b>阻力系数</b>: <<1>>\n
RCLModuleInfo5 = <b>降落伞最高温度</b>: <<1>>°C\n
RCLModuleInfo6 = <b>预展开直径</b>: <<1>>m\n
RCLModuleInfo7 = <b>展开直径</b>: <<1>>m\n
RCLModuleInfo8 = <b>最低展开气压</b>: <<1>>atm\n
RCLModuleInfo9 = <b>展开高度</b>: <<1>>m\n
RCLModuleInfo10 = <b>预展开速度</b>: <<1>>s\n
RCLModuleInfo11 = <b>展开速度</b>: <<1>>s\n
RCLModuleInfoCaseMass = <b>质量</b>: <<1>>\n
RCLModuleInfoSpares = <b>备用伞</b>: <<1>>\n
RCLModuleInfoMaterialAutocutSpeed = <b>自动切断速度</b>: <<1>>m/s\n
RCLModuleInfoMaterial = <b>降落伞材料</b>: <<1>>
RCLModuleInfoDragCoefficient = <b>阻力系数</b>: <<1>>\n
RCLModuleInfoMaxTemp = <b>降落伞最高温度</b>: <<1>>°C\n
RCLModuleInfoPredeployedDiameter = <b>预展开直径</b>: <<1>>m\n
RCLModuleInfoDeployedDiameter = <b>展开直径</b>: <<1>>m\n
RCLModuleInfoMinDeploymentPressure = <b>最低展开气压</b>: <<1>>atm\n
RCLModuleInfoDeploymentAltitude = <b>展开高度</b>: <<1>>m\n
RCLModuleInfoPredeploymentSpeed = <b>预展开速度</b>: <<1>>s\n
RCLModuleInfoDeploymentSpeed = <b>展开速度</b>: <<1>>s\n

RCLRepackErrorMessage = 只有1级以上的工程师能重新打包降落伞
RCLDestroyMessage = <color=orange>[RealChute]: <<1>>的降落伞因为气动和过热而损毁了.</color>
Expand Down