-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathModuleReactionWheelIndicator.cs
More file actions
133 lines (119 loc) · 4.29 KB
/
Copy pathModuleReactionWheelIndicator.cs
File metadata and controls
133 lines (119 loc) · 4.29 KB
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
129
130
131
132
133
using UnityEngine;
namespace IndicatorLights
{
/// <summary>
/// A module that sets the display based on the current status of a reaction wheel.
/// </summary>
class ModuleReactionWheelIndicator : ModuleSourceIndicator<ModuleReactionWheel>, IToggle, IScalar
{
private StartState startState = StartState.None;
private IColorSource problemSource = null;
private IColorSource normalSource = null;
private IColorSource pilotOnlySource = null;
private IColorSource sasOnlySource = null;
/// <summary>
/// The color to display when the reaction wheel has a problem.
/// </summary>
[KSPField]
[ColorSourceIDField]
public string problemColor = Colors.ToString(DefaultColor.Warning);
/// <summary>
/// The color to display when the reaction wheel is operating in "normal" mode.
/// </summary>
[KSPField]
[ColorSourceIDField]
public string normalColor = Colors.ToString(DefaultColor.ReactionWheelNormal);
/// <summary>
/// The color to display when the reaction wheel is operating in "pilot only" mode.
/// </summary>
[KSPField]
[ColorSourceIDField]
public string pilotOnlyColor = Colors.ToString(DefaultColor.ReactionWheelPilotOnly);
/// <summary>
/// The color to display when the reaction wheel is operating in "SAS only" mode.
/// </summary>
[KSPField]
[ColorSourceIDField]
public string sasOnlyColor = Colors.ToString(DefaultColor.ReactionWheelSASOnly);
public override void OnStart(StartState state)
{
base.OnStart(state);
startState = state;
}
public override void ParseIDs()
{
base.ParseIDs();
problemSource = FindColorSource(problemColor);
normalSource = FindColorSource(normalColor);
pilotOnlySource = FindColorSource(pilotOnlyColor);
sasOnlySource = FindColorSource(sasOnlyColor);
}
public override bool HasColor
{
get { return base.HasColor && CurrentSource.HasColor; }
}
public override Color OutputColor
{
get
{
Color baseColor = CurrentSource.OutputColor;
return (IsAutopilotActive) ? baseColor : (0.5f * baseColor);
}
}
/// <summary>
/// Gets whether SAS is turned on. Returns true if we're in a situation where it's
/// irrelevant (e.g. in the vehicle editor).
/// </summary>
private bool IsAutopilotActive
{
get
{
return ((startState == StartState.Editor) || (vessel == null)) ? true : vessel.Autopilot.Enabled;
}
}
private IColorSource CurrentSource
{
get
{
if (SourceModule == null) return ColorSources.BLACK;
switch (SourceModule.State)
{
case ModuleReactionWheel.WheelState.Disabled:
return ColorSources.BLACK;
case ModuleReactionWheel.WheelState.Broken:
return problemSource;
default:
break;
}
switch ((VesselActuatorMode)SourceModule.actuatorModeCycle)
{
case VesselActuatorMode.Pilot:
return pilotOnlySource;
case VesselActuatorMode.SAS:
return sasOnlySource;
default:
return normalSource;
}
}
}
public bool ToggleStatus
{
get
{
return (SourceModule != null)
&& (SourceModule.State == ModuleReactionWheel.WheelState.Active)
&& (SourceModule.authorityLimiter > 0);
}
}
public double ScalarValue
{
get
{
if (SourceModule == null) return 0.0;
return (SourceModule.State == ModuleReactionWheel.WheelState.Active)
? SourceModule.authorityLimiter
: 0.0;
}
}
}
}