From 9623a4a86901dbeb6fdf2b21fc044540d4875782 Mon Sep 17 00:00:00 2001 From: annabunches Date: Sun, 29 Aug 2021 04:05:56 -0400 Subject: [PATCH] Add inter-processor signalling to automate entire launch process. --- prog/launchpad.ks | 36 ++++++++++++++++++++++++++++++------ prog/rocket.ks | 19 +++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/prog/launchpad.ks b/prog/launchpad.ks index d48240b..6b4b8c8 100644 --- a/prog/launchpad.ks +++ b/prog/launchpad.ks @@ -4,11 +4,13 @@ // to the main ship computer. // // 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 // for this. RunOncePath("/lib/systems"). +RunOncePath("/lib/ui"). ClearGuis(). @@ -28,21 +30,31 @@ function enableLaunchpadFlow { } function preLaunch { + parameter options. + print "Beginning pre-launch sequence.". NoFuelResources(false). // turn on generator and fuel flow enableLaunchpadFlow(). - + + local duration is options["Spool-up Time"]:TEXT:ToNumber(). lock THROTTLE to 0. stage. local startTime is TIME:SECONDS. - lock THROTTLE to (TIME:SECONDS-startTime)/15. - wait 15. + lock THROTTLE to (TIME:SECONDS-startTime)/duration. + wait duration. set SHIP:CONTROL:PILOTMAINTHROTTLE to 1.0. unlock THROTTLE. - print "Pre-launch sequence complete.". + print "Pre-launch sequence complete. Initiating launch.". + + local msg is Lex( + "command", "launch", + "angle", options["Kick Angle"]:TEXT:ToNumber(), + "time", options["Kick Time"]:TEXT:ToNumber() + ). + Processor("shipcpu"):CONNECTION:SendMessage(msg). iface:Hide(). shutdown. } @@ -51,8 +63,20 @@ global iface is gui(250, 300). set iface:X to 200. set iface:Y to 500. local top is iface:AddVLayout(). +local row is iface:AddHLayout(). +local stk is iface:AddStack(). + +MakeMenu( + stk, + MakeButton(row, "Launch Sequence"), + List( + List("Spool-up Time", "SCALAR", "15"), + List("Kick Angle", "SCALAR", "30"), + List("Kick Time", "SCALAR", "45") + ), + "Execute", + preLaunch@ +). -local btn is top:AddButton("Pre-Launch"). -set btn:onClick to preLaunch@. iface:Show(). wait until false. diff --git a/prog/rocket.ks b/prog/rocket.ks index 5d884ba..8defbb3 100644 --- a/prog/rocket.ks +++ b/prog/rocket.ks @@ -172,6 +172,25 @@ MakeMenu( ). iface:show(). + +until SHIP:STATUS <> "PRELAUNCH" { + if not CORE:MESSAGES:EMPTY { + local msg is CORE:MESSAGES:Pop(). + local data is msg:CONTENT. + if data["command"] = "launch" { + Launch( + 80000, + 2.0, + 5.0, + data["angle"], + data["time"], + true + ). + } + } + wait 0.001. +} + wait until false. function refreshSensors {