From 234e769fe95a8f04bdb55075358a4a47b73aba82 Mon Sep 17 00:00:00 2001 From: sfokin Date: Sun, 6 Apr 2025 00:33:10 +0300 Subject: [PATCH] add digger ship script --- digger_ship.lua | 325 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 digger_ship.lua diff --git a/digger_ship.lua b/digger_ship.lua new file mode 100644 index 0000000..cfd77ee --- /dev/null +++ b/digger_ship.lua @@ -0,0 +1,325 @@ +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="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) + if not mem.orderId then return end + local str = "q" .. tostring(mem.orderId) + digiline_send(str, 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.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") + sendmessage("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.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 +