Add launchpad code for controlling pre-launch sequence with ModularLaunchpads. (this is 100% aesthetic but it's really pretty)

This commit is contained in:
Anna Rose 2021-08-29 01:07:14 -04:00
parent 4c356b61ab
commit 6be96ebf8a
4 changed files with 80 additions and 0 deletions

10
boot/launchpad.ks Normal file
View File

@ -0,0 +1,10 @@
RunOncePath("0:/lib/boot").
parameter debug is false.
Bootstrap(
"/boot/launchpad",
"/prog/launchpad",
List(),
debug
).

View File

@ -35,6 +35,8 @@ function Launch {
parameter pitchTime is 30. parameter pitchTime is 30.
parameter autoStage is true. parameter autoStage is true.
NoFuelResources(true).
// Configure subsystems. // Configure subsystems.
RCS off. RCS off.
SAS off. SAS off.

View File

@ -23,3 +23,13 @@ function SolarPanels {
PANELS off. PANELS off.
} }
} }
function NoFuelResources {
parameter enable is true.
for part in SHIP:PartsTagged("nofuel") {
for resource in part:RESOURCES {
set resource:ENABLED to enable.
}
}
}

58
prog/launchpad.ks Normal file
View File

@ -0,0 +1,58 @@
// Control code for pre-launch sequence using ModularLaunchPads.
// This enable's the launchpad's fuel feed,
// stages, spools up the engines, and then "releases control"
// to the main ship computer.
//
// The launchpad object should have the "launchpad" tag.
// Fuel tanks with the "nofuel" tag will have *all* resources temporarily disabled during this
// sequence. The main ship computer must re-enable them after staging. NoFuelResources in lib/systems is ideal
// for this.
RunOncePath("/lib/systems").
ClearGuis().
function enableLaunchpadFlow {
local lp is SHIP:PartsTagged("launchpad")[0].
// ModularLaunchpads have more than one module with the "ModuleGenerator" name, so we have to
// iterate over them all.
local i is 0.
until i >= lp:ALLMODULES:LENGTH {
local m is lp:GetModuleByIndex(i).
if m:NAME = "ModuleGenerator" {
if m:HasEvent("activate generator") { m:DoEvent("activate generator"). }
if m:HasEvent("start fueling") { m:DoEvent("start fueling"). }
}
set i to i+1.
}
}
function preLaunch {
print "Beginning pre-launch sequence.".
NoFuelResources(false).
// turn on generator and fuel flow
enableLaunchpadFlow().
lock THROTTLE to 0.
stage.
local startTime is TIME:SECONDS.
lock THROTTLE to (TIME:SECONDS-startTime)/15.
wait 15.
set SHIP:CONTROL:PILOTMAINTHROTTLE to 1.0.
unlock THROTTLE.
print "Pre-launch sequence complete.".
iface:Hide().
shutdown.
}
global iface is gui(250, 300).
set iface:X to 200.
set iface:Y to 500.
local top is iface:AddVLayout().
local btn is top:AddButton("Pre-Launch").
set btn:onClick to preLaunch@.
iface:Show().
wait until false.