Compare commits

...

2 Commits

11 changed files with 110 additions and 46 deletions

View File

@ -4,7 +4,6 @@ parameter debug is false.
Bootstrap( Bootstrap(
"/boot/aircraft", "/boot/aircraft",
"/prog/aircraft", List("/prog/aircraft"),
List(), // no additional program files
debug debug
). ).

View File

@ -4,7 +4,6 @@ parameter debug is false.
Bootstrap( Bootstrap(
"/boot/helicopter", "/boot/helicopter",
"/prog/helicopter", List("/prog/helicopter"),
List(), // no additional program files
debug debug
). ).

View File

@ -4,7 +4,6 @@ parameter debug is false.
Bootstrap( Bootstrap(
"/boot/launchpad", "/boot/launchpad",
"/prog/launchpad", List("/prog/launchpad"),
List(),
debug debug
). ).

View File

@ -4,7 +4,6 @@ parameter debug is false.
Bootstrap( Bootstrap(
"/boot/rocket", "/boot/rocket",
"/prog/rocket", List("/prog/rocket"),
List(),
debug debug
). ).

View File

@ -4,12 +4,12 @@ parameter debug is false.
Bootstrap( Bootstrap(
"/boot/satellite", "/boot/satellite",
"",
List( List(
"/prog/execnode", "/prog/execnode",
"/prog/circ", "/prog/circ",
"/prog/satdeploy", "/prog/satdeploy",
"/prog/nodestats" "/prog/nodestats"
), ),
debug debug,
false
). ).

View File

@ -4,12 +4,12 @@ parameter debug is false.
Bootstrap( Bootstrap(
"/boot/science", "/boot/science",
"",
List( List(
"/prog/circ", "/prog/circ",
"/prog/execnode", "/prog/execnode",
"/prog/nodestats", "/prog/nodestats",
"/prog/reentry" "/prog/reentry"
), ),
debug debug,
false
). ).

View File

@ -1,20 +1,24 @@
// "bootfile" should be the path to the bootfile, so it can be deleted.
// "programs" is a List() of programs to install in the CPU root.
// "debug" will skip compiling if enabled, and only copy files.
// if "init" is true, the first program in the programs List will become the new boot file.
// pass false in here if you want CPU control from the terminal.
function Bootstrap { function Bootstrap {
parameter bootFile, init, programs, debug. parameter bootFile, programs, debug, init is true.
local initProgram is "".
if init {
set initProgram to programs[0]:Replace("/prog", "").
}
// create a list of libraries that we need to compile // create a list of libraries that we need to compile
local libs is UniqueSet(). local libs is UniqueSet().
if init <> "" {
addLibs(libs, init).
}
for program in programs { for program in programs {
addLibs(libs, program). addLibs(libs, program).
} }
// compile the main program files // compile the main program files
if init <> "" {
compileFile(init, "/init", debug).
}
for program in programs { for program in programs {
compileFile(program, program:Replace("/prog", ""), debug). compileFile(program, program:Replace("/prog", ""), debug).
} }
@ -29,18 +33,13 @@ function Bootstrap {
// Open a terminal and run init. // Open a terminal and run init.
CORE:PART:GETMODULE("kOSProcessor"):DOEVENT("Open Terminal"). CORE:PART:GETMODULE("kOSProcessor"):DOEVENT("Open Terminal").
if init <> "" { if init <> "" {
run "/init". RunPath(initProgram).
} }
// ... or delete the bootstrapping file, set init to the bootfile, // ... or delete the bootstrapping file, configure to boot from the init program,
// and reboot. // and reboot.
} else { } else {
DeletePath("1:" + bootfile). DeletePath("1:" + bootfile).
// Set OS to boot and restart. set CORE:BOOTFILENAME to initProgram.
if init = "" {
set CORE:BOOTFILENAME to "".
} else {
set CORE:BOOTFILENAME to "/init".
}
reboot. reboot.
} }
} }

View File

@ -30,14 +30,12 @@ function pitchProgram {
function Launch { function Launch {
parameter apoapsisTarget is 80000. parameter apoapsisTarget is 80000.
parameter atmoTWR is 2.0. parameter atmoTWR is 2.0.
// parameter leadAngle is 2.
parameter minPitch is 5. parameter minPitch is 5.
parameter initialPitch is 20. parameter kickAngle is 20.
parameter pitchTime is 30. parameter kickTime is 30.
parameter kickStart is 100.
parameter autoStage is true. parameter autoStage is true.
NoFuelResources(true).
// Configure subsystems. // Configure subsystems.
RCS off. RCS off.
SAS off. SAS off.
@ -72,17 +70,18 @@ function Launch {
} }
} }
print "Phase 1: Vertical Ascent.". print "Phase 1: Vertical Ascent.".
lock THROTTLE to 1.0. lock THROTTLE to 1.0.
lock STEERING to Heading(90,90,270). lock STEERING to Heading(90,90,270).
NoFuelResources(true).
PreLaunchCrossfeed(false).
stage. stage.
wait until SHIP:VERTICALSPEED > 100. wait until SHIP:VERTICALSPEED > kickStart.
print "Phase 2: Initial Pitch.". print "Phase 2: Initial Pitch.".
local startTime is TIME:SECONDS. local startTime is TIME:SECONDS.
lock STEERING to pitchProgram(initialPitch, pitchTime, startTime). lock STEERING to pitchProgram(kickAngle, kickTime, startTime).
wait pitchTime. wait kickTime.
print "Phase 3: Stable Prograde Boost.". print "Phase 3: Stable Prograde Boost.".
lock STEERING to getClampedDir(minPitch). lock STEERING to getClampedDir(minPitch).

View File

@ -33,3 +33,20 @@ function NoFuelResources {
} }
} }
} }
function PreLaunchCrossfeed {
parameter enable is true.
local eventName is "Disable Crossfeed".
if enable {
set eventName to "Enable Crossfeed".
}
for part in SHIP:PartsTagged("prelaunch") {
if part:MODULES:Find("ModuleToggleCrossfeed") = -1 {
print "Prelaunch part does not have crossfeed module. skipping.".
} else if part:GetModule("ModuleToggleCrossfeed"):ALLEVENTNAMES:Find(eventName) > -1 {
part:GetModule("ModuleToggleCrossfeed"):DoEvent(eventName).
}
}
}

View File

@ -3,11 +3,14 @@
// stages, spools up the engines, and then "releases control" // stages, spools up the engines, and then "releases control"
// to the main ship computer. // to the main ship computer.
// //
// *** TAGGING REQUIREMENTS ***
// The launchpad object should have the "launchpad" tag. // The launchpad object should have the "launchpad" tag.
// The ship's main CPU (the one with launch functionality" should be tagged "shipcpu". // The ship's main CPU (the one with launch functionality" should be tagged "shipcpu".
// Fuel tanks with the "nofuel" tag will have *all* resources temporarily disabled during this // Fuel tanks with the "nofuel" tag will have *all* resources temporarily disabled during the pre-launch
// sequence. The main ship computer must re-enable them after staging. NoFuelResources in lib/systems is ideal // sequence. The main ship computer must re-enable them after staging. NoFuelResources() in lib/systems is ideal
// for this. // for this.
// Similarly, any crossfeed-capable decouplers tagged "prelaunch" will have crossfeed ENABLED during pre-launch.
// MainCPU should, again, disable these once it stages. PreLaunchCrossfeed() in lib/systems is your friend.
RunOncePath("/lib/systems"). RunOncePath("/lib/systems").
RunOncePath("/lib/ui"). RunOncePath("/lib/ui").
@ -35,6 +38,7 @@ function preLaunch {
print "Beginning pre-launch sequence.". print "Beginning pre-launch sequence.".
NoFuelResources(false). NoFuelResources(false).
PreLaunchCrossfeed(true).
// turn on generator and fuel flow // turn on generator and fuel flow
enableLaunchpadFlow(). enableLaunchpadFlow().
@ -56,7 +60,8 @@ function preLaunch {
local msg is Lex( local msg is Lex(
"command", "launch", "command", "launch",
"angle", options["Kick Angle"]:TEXT:ToNumber(), "angle", options["Kick Angle"]:TEXT:ToNumber(),
"time", options["Kick Time"]:TEXT:ToNumber() "time", options["Kick Time"]:TEXT:ToNumber(),
"start", options["Kick Start"]:TEXT:ToNumber()
). ).
Processor("shipcpu"):CONNECTION:SendMessage(msg). Processor("shipcpu"):CONNECTION:SendMessage(msg).
iface:Hide(). iface:Hide().
@ -76,7 +81,8 @@ MakeMenu(
List( List(
List("Spool-up Time", "SCALAR", "15"), List("Spool-up Time", "SCALAR", "15"),
List("Kick Angle", "SCALAR", "30"), List("Kick Angle", "SCALAR", "30"),
List("Kick Time", "SCALAR", "45") List("Kick Time", "SCALAR", "45"),
List("Kick Start", "SCALAR", "100")
), ),
"Execute", "Execute",
preLaunch@ preLaunch@

View File

@ -20,9 +20,9 @@ on AG9 {
// Top-level menu structure. // Top-level menu structure.
local iface is gui(250, 300). local iface is gui(250, 300).
set iface:X to 200. set iface:X to 200.
set iface:Y to 700. set iface:Y to 750.
local top is iface:AddVLayout(). local top is iface:AddVLayout().
local rows is list(MakeRow(top), MakeRow(top), MakeRow(top)). local rows is list(MakeRow(top), MakeRow(top), MakeRow(top), MakeRow(top)).
local stk is iface:AddStack(). local stk is iface:AddStack().
// Buttons and menus. // Buttons and menus.
@ -95,8 +95,9 @@ MakeMenu(
MakeButton(rows[2], "Launch"), MakeButton(rows[2], "Launch"),
List( List(
List("Target Apoapsis", "SCALAR", "80000"), List("Target Apoapsis", "SCALAR", "80000"),
List("Initial Pitch", "SCALAR", "30"), List("Kick Angle", "SCALAR", "30"),
List("Pitch Time", "SCALAR", "45"), List("Kick Time", "SCALAR", "45"),
List("Kick Start", "SCALAR", "100"),
List("Atmo TWR", "SCALAR", "2.0"), List("Atmo TWR", "SCALAR", "2.0"),
List("Minimum Pitch", "SCALAR", "5"), List("Minimum Pitch", "SCALAR", "5"),
List("Autostage", "BOOL", true) List("Autostage", "BOOL", true)
@ -108,8 +109,9 @@ MakeMenu(
options["Target Apoapsis"]:TEXT:ToNumber(), options["Target Apoapsis"]:TEXT:ToNumber(),
options["Atmo TWR"]:TEXT:ToNumber(), options["Atmo TWR"]:TEXT:ToNumber(),
options["Minimum Pitch"]:TEXT:ToNumber(), options["Minimum Pitch"]:TEXT:ToNumber(),
options["Initial Pitch"]:TEXT:ToNumber(), options["Kick Angle"]:TEXT:ToNumber(),
options["Pitch Time"]:TEXT:ToNumber(), options["Kick Time"]:TEXT:ToNumber(),
options["Kick Start"]:TEXT:ToNumber(),
options["Autostage"]:PRESSED options["Autostage"]:PRESSED
). ).
} }
@ -171,6 +173,50 @@ MakeMenu(
} }
). ).
MakeButton(
rows[3],
"Pro",
{
set done to false.
lock STEERING to SHIP:PROGRADE.
wait until done.
set done to false.
}
).
MakeButton(
rows[3],
"Ret",
{
set done to false.
lock STEERING to SHIP:RETROGRADE.
wait until done.
set done to false.
}
).
MakeButton(
rows[3],
"Srf Pro",
{
set done to false.
lock STEERING to SHIP:SRFPROGRADE.
wait until done.
set done to false.
}
).
MakeButton(
rows[3],
"Srf Ret",
{
set done to false.
lock STEERING to SHIP:SRFRETROGRADE.
wait until done.
set done to false.
}
).
iface:show(). iface:show().
until SHIP:STATUS <> "PRELAUNCH" { until SHIP:STATUS <> "PRELAUNCH" {
@ -184,6 +230,7 @@ until SHIP:STATUS <> "PRELAUNCH" {
5.0, 5.0,
data["angle"], data["angle"],
data["time"], data["time"],
data["start"],
true true
). ).
} }