/
MechJebModuleRCSBalancerWindow.cs
128 lines (104 loc) · 5.01 KB
/
MechJebModuleRCSBalancerWindow.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System;
using JetBrains.Annotations;
using KSP.Localization;
using UnityEngine;
namespace MuMech
{
[UsedImplicitly]
public class MechJebModuleRCSBalancerWindow : DisplayModule
{
public MechJebModuleRCSBalancer balancer;
public override void OnStart(PartModule.StartState state)
{
balancer = Core.GetComputerModule<MechJebModuleRCSBalancer>();
if (balancer.smartTranslation)
{
balancer.Users.Add(this);
}
base.OnStart(state);
}
private void SimpleTextInfo(string left, string right)
{
GUILayout.BeginHorizontal();
GUILayout.Label(left, GUILayout.ExpandWidth(true));
GUILayout.Label(right, GUILayout.ExpandWidth(false));
GUILayout.EndHorizontal();
}
protected override void WindowGUI(int windowID)
{
GUILayout.BeginVertical();
bool wasEnabled = balancer.smartTranslation;
GUILayout.BeginHorizontal();
balancer.smartTranslation =
GUILayout.Toggle(balancer.smartTranslation, Localizer.Format("#MechJeb_RCSBalancer_checkbox1"),
GUILayout.Width(130)); //"Smart translation"
GUILayout.EndHorizontal();
if (wasEnabled != balancer.smartTranslation)
{
balancer.ResetThrusterForces();
if (balancer.smartTranslation)
{
balancer.Users.Add(this);
}
else
{
balancer.Users.Remove(this);
}
}
if (balancer.smartTranslation)
{
// Overdrive
double oldOverdrive = balancer.overdrive;
double oldOverdriveScale = balancer.overdriveScale;
double oldFactorTorque = balancer.tuningParamFactorTorque;
double oldFactorTranslate = balancer.tuningParamFactorTranslate;
double oldFactorWaste = balancer.tuningParamFactorWaste;
GuiUtils.SimpleTextBox(Localizer.Format("#MechJeb_RCSBalancer_label1"), balancer.overdrive, "%"); //"Overdrive"
double sliderVal = GUILayout.HorizontalSlider((float)balancer.overdrive, 0.0F, 1.0F);
const int sliderPrecision = 3;
if (Math.Round(Math.Abs(sliderVal - oldOverdrive), sliderPrecision) > 0)
{
double rounded = Math.Round(sliderVal, sliderPrecision);
balancer.overdrive = new EditableDoubleMult(rounded, 0.01);
}
GUILayout.Label(
Localizer.Format("#MechJeb_RCSBalancer_label2")); //"Overdrive increases power when possible, at the cost of RCS fuel efficiency."
// Advanced options
balancer.advancedOptions =
GUILayout.Toggle(balancer.advancedOptions, Localizer.Format("#MechJeb_RCSBalancer_checkbox2")); //"Advanced options"
if (balancer.advancedOptions)
{
// This doesn't work properly, and it might not even be needed.
//balancer.smartRotation = GUILayout.Toggle(balancer.smartRotation, "Smart rotation");
GuiUtils.SimpleTextBox(Localizer.Format("#MechJeb_RCSBalancer_label3"), balancer.overdriveScale); //"Overdrive scale"
GuiUtils.SimpleTextBox(Localizer.Format("#MechJeb_RCSBalancer_label4"), balancer.tuningParamFactorTorque); //"torque factor"
GuiUtils.SimpleTextBox(Localizer.Format("#MechJeb_RCSBalancer_label5"), balancer.tuningParamFactorTranslate); //"Translate factor"
GuiUtils.SimpleTextBox(Localizer.Format("#MechJeb_RCSBalancer_label6"), balancer.tuningParamFactorWaste); //"Waste factor"
}
// Apply tuning parameters.
if (oldOverdrive != balancer.overdrive
|| oldOverdriveScale != balancer.overdriveScale
|| oldFactorTorque != balancer.tuningParamFactorTorque
|| oldFactorTranslate != balancer.tuningParamFactorTranslate
|| oldFactorWaste != balancer.tuningParamFactorWaste)
{
balancer.UpdateTuningParameters();
}
}
if (balancer.smartTranslation)
{
balancer.Users.Add(this);
}
else
{
balancer.Users.Remove(this);
}
GUILayout.EndVertical();
base.WindowGUI(windowID);
}
public override GUILayoutOption[] WindowOptions() => new[] { GUILayout.Width(240), GUILayout.Height(30) };
public override string GetName() => Localizer.Format("#MechJeb_RCSBalancer_title"); //"RCS Balancer"
public override string IconName() => "RCS Balancer";
public MechJebModuleRCSBalancerWindow(MechJebCore core) : base(core) { }
}
}