// 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. // 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"). RunOncePath("/lib/sound"). 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 { parameter options. print "Beginning pre-launch sequence.". NoFuelResources(false). // turn on generator and fuel flow enableLaunchpadFlow(). InfoTone(). wait 2. 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)/duration. wait duration. set SHIP:CONTROL:PILOTMAINTHROTTLE to 1.0. unlock THROTTLE. 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. } 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@ ). iface:Show(). wait until false.