From 6830f23613c039cd37cd1abe372d7a962daef56f Mon Sep 17 00:00:00 2001 From: annabunches Date: Mon, 13 Sep 2021 23:51:18 -0400 Subject: [PATCH] Improve launch sequence, add some control buttons to rocket program. --- lib/launch_rocket.ks | 17 ++++++------- lib/systems.ks | 17 +++++++++++++ prog/launchpad.ks | 14 ++++++++--- prog/rocket.ks | 59 +++++++++++++++++++++++++++++++++++++++----- 4 files changed, 88 insertions(+), 19 deletions(-) diff --git a/lib/launch_rocket.ks b/lib/launch_rocket.ks index 6c47c33..f353504 100644 --- a/lib/launch_rocket.ks +++ b/lib/launch_rocket.ks @@ -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). diff --git a/lib/systems.ks b/lib/systems.ks index d8de579..656e1f6 100644 --- a/lib/systems.ks +++ b/lib/systems.ks @@ -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). + } + } +} diff --git a/prog/launchpad.ks b/prog/launchpad.ks index 28dac29..a0c3708 100644 --- a/prog/launchpad.ks +++ b/prog/launchpad.ks @@ -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@ diff --git a/prog/rocket.ks b/prog/rocket.ks index 8defbb3..b7e7a0f 100644 --- a/prog/rocket.ks +++ b/prog/rocket.ks @@ -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 ). }