-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlib_launch_crew.ks
More file actions
146 lines (122 loc) · 3.1 KB
/
lib_launch_crew.ks
File metadata and controls
146 lines (122 loc) · 3.1 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
134
135
136
137
138
139
140
141
142
143
144
145
146
@LAZYGLOBAL OFF. // #include init
FOR f IN LIST(
"lib_launch_common.ks", // #include lib_launch_common
"lib_chutes.ks", // #include lib_chutes
"lib_parts.ks" // #include lib_parts
) { runScript(f,debug()). }
GLOBAL LCH_LES_ALT IS BODY:ATM:HEIGHT * 0.62.
GLOBAL LCH_CHUTE_ALT IS BODY:ATM:HEIGHT * 0.3.
FUNCTION fireLES {
FOR p IN SHIP:PARTSNAMED("LaunchEscapeSystem") {
p:GETMODULE("ModuleEnginesFX"):DOACTION("activate engine",TRUE).
}
}
FUNCTION jettisonLES {
FOR p IN SHIP:PARTSNAMED("LaunchEscapeSystem") {
pOut("Jettisoning LES").
decouplePart(p).
}
disableLES().
}
FUNCTION launchLES {
IF ALTITUDE > LCH_LES_ALT {
fireLES().
jettisonLES().
}
}
FUNCTION doLaunch {
PARAMETER exit_mode, ap, az IS 90, i IS SHIP:LATITUDE.
launchInit(ap,az,i).
LOCAL LOCK rm TO runMode().
UNTIL rm = exit_mode {
IF rm = 1 {
throttleTo({ RETURN getThrottle() * MIN(MAX(50*(1 - APOAPSIS / ap),0.11),1). }).
steerLaunch().
countDown().
runMode(2,21).
} ELSE IF rm = 2 {
IF NOT isSteerOn() { steerLaunch(). }
launchSteerUpdate().
IF modeTime() > 3 {
rcsOff().
sasOff().
doStage().
launchClamp().
hudMsg("Liftoff!").
runMode(11).
}
} ELSE IF rm = 11 {
IF NOT isSteerOn() { steerLaunch(). }
launchSteerUpdate().
launchStaging().
IF APOAPSIS >= ap {
throttleOff().
runMode(12).
}
} ELSE IF rm = 12 {
steerSurf().
IF ALTITUDE > BODY:ATM:HEIGHT {
rcsOff().
sasOff().
pDV().
runMode(13).
}
// IF APOAPSIS < BODY:ATM:HEIGHT {
// throttleTo({ RETURN getThrottle() * MIN(MAX(90*(1 - APOAPSIS / ap),0.11),1). }).
// runMode(11).
// }
// IF APOAPSIS < ap { LOCK THROTTLE TO MIN(MAX(90*(1 - APOAPSIS / ap),0.11),1). }
// ELSE { throttleTo(). }
} ELSE IF rm = 13 {
launchCirc(ap).
runMode(14).
} ELSE IF rm = 14 {
IF PERIAPSIS > BODY:ATM:HEIGHT {
sepLauncher().
throttleOff().
pDV().
runMode(exit_mode,0).
} ELSE { runMode(21,0). }
} ELSE IF rm = 21 {
throttleOff().
steerOff().
IF hasLES() {
hudMsg("LAUNCH ABORT!", RED, 50).
fireLES().
decoupleByTag("FINAL").
} ELSE { hudMsg("MANUAL STAGING REQUIRED!", RED, 50). }
runMode(22).
} ELSE IF rm = 22 {
IF modeTime() > 6 {
steerSurf(FALSE).
IF hasLES() { JettisonLES(). }
runMode(23).
}
} ELSE IF rm = 23 {
IF modeTime() > 6 { runMode(31). }
} ELSE IF rm = 31 {
IF ALTITUDE > LCH_CHUTE_ALT { steerSurf(FALSE). }
runMode(32).
} ELSE IF rm = 32 {
IF ALTITUDE < LCH_CHUTE_ALT {
steerOff().
IF hasChutes() { hudMsg("Will deploy parachutes once safe."). }
runMode(33).
}
} ELSE IF rm = 33 {
IF hasChutes() { deployChutes(). }
IF LIST("LANDED","SPLASHED"):CONTAINS(STATUS) {
hudMsg("Touchdown.").
WAIT 0.
CORE:DOEVENT("Toggle Power").
}
} ELSE {
pOut("Unexpected run mode: " + rm).
BREAK.
}
IF hasLES() AND rm < 20 { launchLES(). }
IF hasFairing() { launchFairing(). }
IF hasModules() { launchModules(). }
WAIT 0.
}
}