Compare commits
2 Commits
834841a70e
...
6830f23613
Author | SHA1 | Date | |
---|---|---|---|
6830f23613 | |||
9b034aaa1a |
|
@ -4,7 +4,6 @@ parameter debug is false.
|
|||
|
||||
Bootstrap(
|
||||
"/boot/aircraft",
|
||||
"/prog/aircraft",
|
||||
List(), // no additional program files
|
||||
List("/prog/aircraft"),
|
||||
debug
|
||||
).
|
||||
|
|
|
@ -4,7 +4,6 @@ parameter debug is false.
|
|||
|
||||
Bootstrap(
|
||||
"/boot/helicopter",
|
||||
"/prog/helicopter",
|
||||
List(), // no additional program files
|
||||
List("/prog/helicopter"),
|
||||
debug
|
||||
).
|
||||
|
|
|
@ -4,7 +4,6 @@ parameter debug is false.
|
|||
|
||||
Bootstrap(
|
||||
"/boot/launchpad",
|
||||
"/prog/launchpad",
|
||||
List(),
|
||||
List("/prog/launchpad"),
|
||||
debug
|
||||
).
|
||||
|
|
|
@ -4,7 +4,6 @@ parameter debug is false.
|
|||
|
||||
Bootstrap(
|
||||
"/boot/rocket",
|
||||
"/prog/rocket",
|
||||
List(),
|
||||
List("/prog/rocket"),
|
||||
debug
|
||||
).
|
||||
|
|
|
@ -4,12 +4,12 @@ parameter debug is false.
|
|||
|
||||
Bootstrap(
|
||||
"/boot/satellite",
|
||||
"",
|
||||
List(
|
||||
"/prog/execnode",
|
||||
"/prog/circ",
|
||||
"/prog/satdeploy",
|
||||
"/prog/nodestats"
|
||||
),
|
||||
debug
|
||||
debug,
|
||||
false
|
||||
).
|
||||
|
|
|
@ -4,12 +4,12 @@ parameter debug is false.
|
|||
|
||||
Bootstrap(
|
||||
"/boot/science",
|
||||
"",
|
||||
List(
|
||||
"/prog/circ",
|
||||
"/prog/execnode",
|
||||
"/prog/nodestats",
|
||||
"/prog/reentry"
|
||||
),
|
||||
debug
|
||||
debug,
|
||||
false
|
||||
).
|
||||
|
|
29
lib/boot.ks
29
lib/boot.ks
|
@ -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 {
|
||||
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
|
||||
local libs is UniqueSet().
|
||||
if init <> "" {
|
||||
addLibs(libs, init).
|
||||
}
|
||||
for program in programs {
|
||||
addLibs(libs, program).
|
||||
}
|
||||
|
||||
// compile the main program files
|
||||
if init <> "" {
|
||||
compileFile(init, "/init", debug).
|
||||
}
|
||||
for program in programs {
|
||||
compileFile(program, program:Replace("/prog", ""), debug).
|
||||
}
|
||||
|
@ -29,18 +33,13 @@ function Bootstrap {
|
|||
// Open a terminal and run init.
|
||||
CORE:PART:GETMODULE("kOSProcessor"):DOEVENT("Open Terminal").
|
||||
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.
|
||||
} else {
|
||||
DeletePath("1:" + bootfile).
|
||||
// Set OS to boot and restart.
|
||||
if init = "" {
|
||||
set CORE:BOOTFILENAME to "".
|
||||
} else {
|
||||
set CORE:BOOTFILENAME to "/init".
|
||||
}
|
||||
set CORE:BOOTFILENAME to initProgram.
|
||||
reboot.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,14 +30,12 @@ function pitchProgram {
|
|||
function Launch {
|
||||
parameter apoapsisTarget is 80000.
|
||||
parameter atmoTWR is 2.0.
|
||||
// parameter leadAngle is 2.
|
||||
parameter minPitch is 5.
|
||||
parameter initialPitch is 20.
|
||||
parameter pitchTime is 30.
|
||||
parameter kickAngle is 20.
|
||||
parameter kickTime is 30.
|
||||
parameter kickStart is 100.
|
||||
parameter autoStage is true.
|
||||
|
||||
NoFuelResources(true).
|
||||
|
||||
// Configure subsystems.
|
||||
RCS off.
|
||||
SAS off.
|
||||
|
@ -72,17 +70,18 @@ function Launch {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
print "Phase 1: Vertical Ascent.".
|
||||
lock THROTTLE to 1.0.
|
||||
lock STEERING to Heading(90,90,270).
|
||||
NoFuelResources(true).
|
||||
PreLaunchCrossfeed(false).
|
||||
stage.
|
||||
wait until SHIP:VERTICALSPEED > 100.
|
||||
wait until SHIP:VERTICALSPEED > kickStart.
|
||||
|
||||
print "Phase 2: Initial Pitch.".
|
||||
local startTime is TIME:SECONDS.
|
||||
lock STEERING to pitchProgram(initialPitch, pitchTime, startTime).
|
||||
wait pitchTime.
|
||||
lock STEERING to pitchProgram(kickAngle, kickTime, startTime).
|
||||
wait kickTime.
|
||||
|
||||
print "Phase 3: Stable Prograde Boost.".
|
||||
lock STEERING to getClampedDir(minPitch).
|
||||
|
|
|
@ -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).
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,11 +3,14 @@
|
|||
// stages, spools up the engines, and then "releases control"
|
||||
// to the main ship computer.
|
||||
//
|
||||
// *** TAGGING REQUIREMENTS ***
|
||||
// The launchpad object should have the "launchpad" tag.
|
||||
// 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
|
||||
// sequence. The main ship computer must re-enable them after staging. NoFuelResources in lib/systems is ideal
|
||||
// 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
|
||||
// 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/ui").
|
||||
|
@ -35,6 +38,7 @@ function preLaunch {
|
|||
|
||||
print "Beginning pre-launch sequence.".
|
||||
NoFuelResources(false).
|
||||
PreLaunchCrossfeed(true).
|
||||
|
||||
// turn on generator and fuel flow
|
||||
enableLaunchpadFlow().
|
||||
|
@ -56,7 +60,8 @@ function preLaunch {
|
|||
local msg is Lex(
|
||||
"command", "launch",
|
||||
"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).
|
||||
iface:Hide().
|
||||
|
@ -76,7 +81,8 @@ MakeMenu(
|
|||
List(
|
||||
List("Spool-up Time", "SCALAR", "15"),
|
||||
List("Kick Angle", "SCALAR", "30"),
|
||||
List("Kick Time", "SCALAR", "45")
|
||||
List("Kick Time", "SCALAR", "45"),
|
||||
List("Kick Start", "SCALAR", "100")
|
||||
),
|
||||
"Execute",
|
||||
preLaunch@
|
||||
|
|
|
@ -20,9 +20,9 @@ on AG9 {
|
|||
// Top-level menu structure.
|
||||
local iface is gui(250, 300).
|
||||
set iface:X to 200.
|
||||
set iface:Y to 700.
|
||||
set iface:Y to 750.
|
||||
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().
|
||||
|
||||
// Buttons and menus.
|
||||
|
@ -95,8 +95,9 @@ MakeMenu(
|
|||
MakeButton(rows[2], "Launch"),
|
||||
List(
|
||||
List("Target Apoapsis", "SCALAR", "80000"),
|
||||
List("Initial Pitch", "SCALAR", "30"),
|
||||
List("Pitch Time", "SCALAR", "45"),
|
||||
List("Kick Angle", "SCALAR", "30"),
|
||||
List("Kick Time", "SCALAR", "45"),
|
||||
List("Kick Start", "SCALAR", "100"),
|
||||
List("Atmo TWR", "SCALAR", "2.0"),
|
||||
List("Minimum Pitch", "SCALAR", "5"),
|
||||
List("Autostage", "BOOL", true)
|
||||
|
@ -108,8 +109,9 @@ MakeMenu(
|
|||
options["Target Apoapsis"]:TEXT:ToNumber(),
|
||||
options["Atmo TWR"]:TEXT:ToNumber(),
|
||||
options["Minimum Pitch"]:TEXT:ToNumber(),
|
||||
options["Initial Pitch"]:TEXT:ToNumber(),
|
||||
options["Pitch Time"]:TEXT:ToNumber(),
|
||||
options["Kick Angle"]:TEXT:ToNumber(),
|
||||
options["Kick Time"]:TEXT:ToNumber(),
|
||||
options["Kick Start"]:TEXT:ToNumber(),
|
||||
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().
|
||||
|
||||
until SHIP:STATUS <> "PRELAUNCH" {
|
||||
|
@ -184,6 +230,7 @@ until SHIP:STATUS <> "PRELAUNCH" {
|
|||
5.0,
|
||||
data["angle"],
|
||||
data["time"],
|
||||
data["start"],
|
||||
true
|
||||
).
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user