local function updatepositionui() digiline_send("touch",{ { command="addlabel", label="X: "..mem.position.x or 0, Y=0.7, X=3.5, H=0.8, W=1.2, },{ command="addlabel", label="Y: "..mem.position.y or 0, Y=1.5, X=3.5, H=0.8, W=1.2, },{ command="addlabel", label="Z: "..mem.position.z or 0, Y=2.3, X=3.5, H=0.8, W=1.2, },{ command="addlabel", label="X: "..mem.target.x or 0, Y=0.7, X=6, H=0.8, W=1.2, },{ command="addlabel", label="Y: "..mem.target.y or 0, Y=1.5, X=6, H=0.8, W=1.2, },{ command="addlabel", label="Z: "..mem.target.z or 0, Y=2.3, X=6, H=0.8, W=1.2, },{ command="addlabel", label="Power: "..mem.powerstorage or 0, Y=0.1, X=0.1, H=0.8, W=1.2, },{ command="addlabel", label="Distance: "..mem.distance or 0, Y=2.9, X=3.5, H=0.8, W=1.2, },{ command="addlabel", label="Power req: "..mem.power_req or 0, Y=2.9, X=6, H=0.8, W=1.2, },{ command="addlabel", label="Simulate: "..tostring(mem.sim), Y=3.3, X=6, H=0.8, W=1.2, },{ command="addlabel", label="Sim: "..mem.msg, Y=4.3, X=3.5, H=0.8, W=1.2, } }) end local function drawui() digiline_send("touch",{ { command="clear", },{ command="addbutton", name="btnxinc", label="x+", Y=0.8, X=0.8, H=0.8, W=1.2, },{ command="addbutton", name="btnxdec", label="x-", Y=0.8, X=2, H=0.8, W=1.2, },{ command="addbutton", name="btnydec", label="y-", Y=1.6, H=0.8, W=1.2, X=2, },{ command="addbutton", name="btnyinc", label="y+", Y=1.6, X=0.8, H=0.8, W=1.2, },{ command="addbutton", name="btnup", label="^", Y=1.6, X=0, H=0.8, W=0.6, },{ command="addbutton", name="btnzinc", label="z+", Y=2.4, X=0.8, H=0.8, W=1.2, },{ command="addbutton", name="btnzdec", label="z-", Y=2.4, X=2, H=0.8, W=1.2, },{ command="addbutton", name="btnstepinc", label="step+", Y=3.2, H=0.8, W=1.2, X=0.8, },{ command="addbutton", name="btnstepdec", label="step-", Y=3.2, H=0.8, W=1.2, X=2, },{ command="addbutton", name="btnsim", label="Simulate", Y=4.4, X=0.8, H=0.8, W=1.6, },{ command="addbutton", name="btnjump", label="Jump", Y=5.2, H=0.8, W=1.6, X=0.8, },{ command="addbutton", name="btnreset", label="Reset", Y=6.4, H=0.8, W=1.6, X=0.8, },{ command="addbutton", name="btnpark", label="Park", Y=6.4, H=0.8, W=1.6, X=2.4, },{ command="addbutton", name="btnfire", label="Fire", Y=5.2, X=2.4, H=0.8, W=1.6, },{ command="addlabel", label="Position", Y=0.3, X=3.5, H=0.8, W=1.2, },{ command="addlabel", label="Destination", Y=0.3, X=5.9, H=0.8, W=1.2, },{ command="addlabel", label="Step: "..mem.step or 1, Y=3.3, X=3.5, H=0.8, W=1.2, },{ command="addbutton", name="btnQOn", label="Quarry On", X=4.0, Y=5.2, H=0.8, W=3, },{ command="addbutton", name="btnQOff", label="Quarry Off", X=4.0, Y=6.2, H=0.8, W=3, },{ command="addbutton", name="btnQRestart", label="Quarry Restart", X=4.0, Y=7.2, H=0.8, W=3, } }) updatepositionui() end local function sendmessage(msg) digiline_send("q1", msg) digiline_send("q2", msg) digiline_send("q3", msg) digiline_send("q4", msg) digiline_send("q5", msg) digiline_send("q6", msg) digiline_send("q7", msg) digiline_send("q8", msg) digiline_send("q9", msg) end local function displayQuarryStatus(mon, msg, name) local str = "" if msg.enabled == 1 then str = "-----"..name.."-----" else str = "#####"..name.."#####" end str = str .. "Dgging..." .. msg.max_depth .. "\n" str = str .. "Radius:"..msg.radius .. "\n" str = str .. "Level:" .. msg.dig_level .. "\n" str = str .. "Dug:" .. msg.dug_nodes .. "\n" local finished = "No" if msg.finished then finished = "Yes" end str = str .. "Finished:" .. finished .. "\n" digiline_send(mon, str) end if event.type == "program" then mem.position = {x = 0, y = 0, z=0} mem.target = {x = 0, y = 0, z=0} mem.radius = 8 mem.step = 17 mem.sim = false mem.msg = "" mem.powerstorage = 0 mem.distance = 0 mem.power_req = 0 mem.orderId = 1 drawui() digiline_send("jumpdrive", { command = "get" }) elseif event.type == "digiline" and event.channel == "jumpdrive" then if event.msg.position ~= nil then mem.position = event.msg.position end if event.msg.target ~= nil then mem.target = event.msg.target end if event.msg.powerstorage ~= nil then mem.powerstorage = event.msg.powerstorage end if event.msg.distance ~= nil then mem.distance = event.msg.distance end if event.msg.power_req ~= nil then mem.power_req = event.msg.power_req end if event.msg.success ~= nill then mem.sim = event.msg.success end if event.msg.msg ~= nill then mem.msg = event.msg.msg end drawui() interrupt(5) elseif event.type == "interrupt" then digiline_send("pmhv", "get") digiline_send("nuclear", "get") local str = "q" .. tostring(mem.orderId) digiline_send(str, "get") mem.orderId = mem.orderId + 1 if mem.orderId > 9 then mem.orderId = 1 end interrupt(5) elseif event.type == "digiline" and event.channel == "touch" then if event.msg.btnreset then digiline_send("jumpdrive", { command = "reset" }) elseif event.msg.btnstepinc then mem.step = mem.step+1 elseif event.msg.btnstepdec then mem.step = mem.step-1 if mem.step < 1 then mem.step = 1 end elseif event.msg.btnup then local y = mem.target.y + mem.radius digiline_send("jumpdrive", { command = "set", key = "y", value = y }) elseif event.msg.btnxinc then local x = mem.target.x + mem.step digiline_send("jumpdrive", { command = "set", key = "x", value = x }) elseif event.msg.btnxdec then local x = mem.target.x - mem.step digiline_send("jumpdrive", { command = "set", key = "x", value = x }) elseif event.msg.btnyinc then local y = mem.target.y + mem.step digiline_send("jumpdrive", { command = "set", key = "y", value = y }) elseif event.msg.btnydec then local y = mem.target.y - mem.step digiline_send("jumpdrive", { command = "set", key = "y", value = y }) elseif event.msg.btnzinc then local z = mem.target.z + mem.step digiline_send("jumpdrive", { command = "set", key = "z", value = z }) elseif event.msg.btnzdec then local z = mem.target.z - mem.step digiline_send("jumpdrive", { command = "set", key = "z", value = z }) elseif event.msg.btnsim then digiline_send("jumpdrive", { command = "simulate" }) elseif event.msg.btnjump then digiline_send("jumpdrive", { command = "jump" }) elseif event.msg.btnfire then digiline_send("cannon", { command="fire", verbose=false }) elseif event.msg.btnfired then digiline_send("cannond", { command="fire", verbose=false }) elseif event.msg.btnpark then local x = mem.target.x - 5 local y = mem.target.y - 2 local z = mem.target.z + 4 digiline_send("jumpdrive", { command = "set", key = "x", value = x }) digiline_send("jumpdrive", { command = "set", key = "y", value = y }) digiline_send("jumpdrive", { command = "set", key = "z", value = z }) elseif event.msg.btnQOn then sendmessage("On") elseif event.msg.btnQOff then sendmessage("Off") elseif event.msg.btnQRestart then sendmessage("restart") end digiline_send("jumpdrive", { command = "get" }) elseif event.type == "digiline" and event.channel == "q1" then displayQuarryStatus("monq1", event.msg, "q1") elseif event.type == "digiline" and event.channel == "q2" then displayQuarryStatus("monq2", event.msg, "q2") elseif event.type == "digiline" and event.channel == "q3" then displayQuarryStatus("monq3", event.msg, "q3") elseif event.type == "digiline" and event.channel == "q4" then displayQuarryStatus("monq4", event.msg, "q4") elseif event.type == "digiline" and event.channel == "q5" then displayQuarryStatus("monq5", event.msg, "q5") elseif event.type == "digiline" and event.channel == "q6" then displayQuarryStatus("monq6", event.msg, "q6") elseif event.type == "digiline" and event.channel == "q7" then displayQuarryStatus("monq7", event.msg, "q7") elseif event.type == "digiline" and event.channel == "q8" then displayQuarryStatus("monq8", event.msg, "q8") elseif event.type == "digiline" and event.channel == "q9" then displayQuarryStatus("monq9", event.msg, "q9") elseif event.type == "digiline" and event.channel == "pmhv" and event.msg ~= "get" then str = "Powev HV\n" .. "S:" .. tostring(event.msg.supply) .. "\n" .. "D:" .. tostring(event.msg.demand) .. "\n" .. "Battery:" .. tostring(event.msg.battery_count) .. "\n" .. "BC:" .. tostring(event.msg.battery_charge) .. "\n" .. "BCM:" .. tostring(event.msg.battery_charge_max) digiline_send("monpowhv", str) return elseif event.type == "digiline" and event.channel == "nuclear" and event.msg ~= "get" then str = "Nuclear\n" .. "Siren:" .. tostring(event.msg.siren) .. "\n" .. "Burn:" .. tostring(event.msg.burn_time) .. "\n" .. "Rods:\n" if type(event.msg.rods) == "table" then str = str .. tostring(event.msg.rods[1] or 0) .. " " .. tostring(event.msg.rods[2] or 0) .. " " .. tostring(event.msg.rods[3] or 0) .. "\n" .. tostring(event.msg.rods[4] or 0) .. " " .. tostring(event.msg.rods[5] or 0) .. " " .. tostring(event.msg.rods[6] or 0) end digiline_send("monnuclear", str ) end