From 4d893a32a7e03aedeaca6ed9dbd4539481699e0b Mon Sep 17 00:00:00 2001 From: sfokin Date: Sat, 29 Mar 2025 02:16:09 +0300 Subject: [PATCH] add new scripts, fix errors --- fabric_drawer_controller.lua | 42 ++++++ fabric_order_controller.lua | 196 ++++++++++++++++++++++++++ fabric_tree_farming.lua | 51 ++++++- fabric_tree_farming_sorting.lua | 9 +- scout_touchscreen.lua | 241 ++++++++++++++++++++++++++++++++ 5 files changed, 528 insertions(+), 11 deletions(-) create mode 100644 fabric_drawer_controller.lua create mode 100644 fabric_order_controller.lua create mode 100644 scout_touchscreen.lua diff --git a/fabric_drawer_controller.lua b/fabric_drawer_controller.lua new file mode 100644 index 0000000..8f09979 --- /dev/null +++ b/fabric_drawer_controller.lua @@ -0,0 +1,42 @@ +if event.type == "program" then + mem.drawerChannel = "maindrawer" + mem.tubeChannel = "maindrawerout" + mem.filterChannel = "drawercontroller" + mem.count = 0 + mem.queue = {} + mem.currentTask = nil + mem.state = "idle" + digiline_send("drawerindicator", "blue") + end + +if event.type == "digiline" and event.channel == "drawercontroller" then + if event.msg.status then return end + + table.insert(mem.queue, event.msg) + interrupt(1) +end + +if event.type == "interrupt" then + if #mem.queue == 0 and mem.currentTask == nill then + mem.state = "idle" + digiline_send("drawerindicator", "green") + return + end + if mem.currentTask == nil then + mem.currentTask = table.remove(mem.queue, 1) + mem.count = mem.currentTask.count + mem.state = "working on " .. mem.currentTask.name + digiline_send("drawerindicator", "red") + digiline_send(mem.tubeChannel, mem.currentTask.destination) + end + if mem.count == 0 then + mem.state = "idle" + digiline_send(mem.filterChannel, {name=mem.currentTask.name, status="finished"}) + digiline_send("drawerindicator", "green") + mem.currentTask = nil + else + digiline_send(mem.drawerChannel, mem.currentTask.item .. " " .. tostring(mem.currentTask.stacksize)) + mem.count = mem.count - 1 + end + interrupt(1) +end \ No newline at end of file diff --git a/fabric_order_controller.lua b/fabric_order_controller.lua new file mode 100644 index 0000000..8ce388e --- /dev/null +++ b/fabric_order_controller.lua @@ -0,0 +1,196 @@ +local function createui() +if mem.controls then return end + +mem.controls = { + { + command = "clear" + }, + { + command = "adddropdown", + Y = 1.2, + label = "Drawer Controller", + selected_id = 1, + W = 10, + X = 0.4, + H = 0.8, + name = "ddController", + choices = { + "drawercontroller" + } + }, + { + command = "adddropdown", + Y = 3.2, + label = "Item name", + selected_id = 1, + X = 0.4, + W = 10, + H = 0.8, + name = "ddItem", + choices = { + "basic_materials:oil_extract", + "default:cobble", + "default:copper_ingot", + "default:gold_ingot", + "default:iron_lump", + "default:mese_crystal", + "default:stone", + "flowers:tulip_black", + "mesecons_materials:glue", + "moreblocks:cobble_compressed", + "moretrees:rubber_tree_trunk" + } + }, + { + command = "adddropdown", + Y = 5.2, + label = "Destination", + selected_id = 1, + W = 10, + X = 0.4, + H = 0.8, + name = "ddDestination", + choices = { + "Tacit:cobblecompress", + "Tacit:extract", + "Tacit:furnace", + "Tacit:grinder", + "Tacit:grindextract", + "Tacit:grindfurnace", + "Tacit:obsidian", + "Tacit:plasticin", + "Tacit:refab" + } + }, + { + default = "99", + label = "Stack size", + X = 0.7, + W = 1.2, + command = "addfield", + Y = 7.1, + name = "fldStackSize", + H = 0.8 + }, + { + default = "1", + label = "Stacks count", + X = 1.9, + W = 1.6, + command = "addfield", + Y = 7.1, + name = "fldStacksCount", + H = 0.8 + }, + { + label = "Order", + W = 1.6, + X = 3.2, + command = "addbutton", + H = 0.8, + name = "btnOrder", + Y = 6.8 + }, + { + default = "", + label = "Enter drawer controller or select one", + X = 0.7, + W = 9.2, + command = "addfield", + Y = 0.7, + name = "fldController", + H = 0.8 + }, + { + default = "", + label = "Enter item id or select one", + W = 9.2, + X = 0.7, + command = "addfield", + Y = 2.7, + name = "fldItem", + H = 0.8 + }, + { + default = "", + label = "Enter destination name or select one", + X = 0.7, + W = 9.2, + command = "addfield", + H = 0.8, + name = "fldDestination", + Y = 4.7 + }, + { + command = "addlabel", + label = "Created with SX Digi labs Touch Designer", + Y = 8.11, + X = 7.18 + } +} + +end +local function addvalues(control, value) + local controls = mem.controls + + for k,v in pairs(controls) do + if v.name and v.name == control then + table.insert(v.choices, value) + table.sort(v.choices) + end + end + + mem.controls = controls +end + +if event.type == "program" then + mem = {} + createui() + digiline_send("touch", mem.controls) + mem.orderNumber = 0 + +end + +if event.type == "digiline" then + if event.channel ~= "touch" then return end + if event.msg.clicker ~= "Tacit" then return end + if event.msg.quit then return end + if event.msg.btnOrder ~= "Order" then return end + + mem.event = event.msg + + if event.channel == "touch" then + local controller = event.msg.ddController + local item = event.msg.ddItem + local destination = event.msg.ddDestination + if event.msg.fldItem ~= "" then + item = event.msg.fldItem + addvalues("ddItem", event.msg.fldItem) + end + + if event.msg.fldDestination ~= "" then + destination = event.msg.fldDestination + addvalues("ddDestination", event.msg.fldDestination) + end + + if event.msg.fldController ~= "" then + controller = event.msg.fldController + addvalues("ddController", event.msg.fldController) + end + + local order = { + name="fc-" .. tostring(mem.orderNumber), + destination=destination, + item=item, + stacksize=tonumber(event.msg.fldStackSize), + count=tonumber(event.msg.fldStacksCount), + } + + mem.order = order + + mem.orderNumber = mem.orderNumber + 1 + digiline_send("touch", mem.controls) + digiline_send(controller, order) + digiline_send("ordermon", order.name) + end +end \ No newline at end of file diff --git a/fabric_tree_farming.lua b/fabric_tree_farming.lua index afa9aad..1a040ad 100644 --- a/fabric_tree_farming.lua +++ b/fabric_tree_farming.lua @@ -1,10 +1,13 @@ if event.type == "program" then mem.events = {} + mem.treecount = 0 mem.inventory = {sapling = 0, fertiliser = 0} digiline_send("treedetector",{distance=0, command="get"}) digiline_send("extender1", {a = false, b = false, c = false, d = false}) digiline_send("extender2", {a = false, b = false, c = false, d = false}) mem.state = "idle" + mem.isSaplingOrdered = false + mem.isFertiliserOrederd = false end if event.type == "digiline" then @@ -24,6 +27,18 @@ if event.type == "digiline" then mem.state = "prepare" interrupt(30) end + + if event.channel == "drawercontroller" and event.msg.status then + if event.msg.name == "treefarmingsapplingorder" then + mem.isSaplingOrdered = false + if mem.isFertiliserOrederd == false then mem.state = "prepare" interrupt(30) end + end + + if event.msg.name == "treefarmingfertilisedorder" then + mem.isFertiliserOrederd = false + if mem.isSaplingOrdered == false then mem.state = "prepare" interrupt(30) end + end + end end if event.type == "interrupt" then @@ -54,9 +69,31 @@ if event.type == "interrupt" then local item = mem.currentItem if item ~= "air" then mem.state = "wait" interrupt(1) return end if mem.inventory["sapling"] == 0 or mem.inventory["fertiliser"] == 0 then - --order from drawer default:sapling and bonemeal:fertiliser - mem.state = "prepare" - interrupt(20) + --order from drawer default:sapling and pandorabox_custom:super_fertiliser + if mem.inventory["sapling"] == 0 then + local order = { + name="treefarmingsapplingorder", + destination="Tacit:treefarming", + item="default:sapling", + stacksize=1, count=1 + } + digiline_send("drawercontroller", order) + mem.isSaplingOrdered = true + mem.state = "pause" + digiline_send("treemon", "no sapling\nordering...") + end + if mem.inventory["fertiliser"] == 0 then + local order = { + name="treefarmingfertilisedorder", + destination="Tacit:treefarming", + item="pandorabox_custom:super_fertiliser", + stacksize=99, count=1 + } + mem.isFertiliserOrederd = true + digiline_send("drawercontroller", order) + digiline_send("treemon", "no\nfertiliser\nordering...") + mem.state = "pause" + end else mem.state = "planting" digiline_send("extender2", {c=false}) @@ -84,6 +121,14 @@ if event.type == "interrupt" then digiline_send("extender1", {c = true}) mem.state = "wait" mem.currentItem = "" + mem.treecount = mem.treecount + 1 + local str = "Trees done:\n" .. + tostring(mem.treecount) .. "\n" .. + "saplings:\n" .. + tostring(mem.inventory["sapling"]) .. "\n" .. + "fertiliser\n" .. + tostring(mem.inventory["fertiliser"]) + digiline_send("treemon", str) interrupt(1) end end diff --git a/fabric_tree_farming_sorting.lua b/fabric_tree_farming_sorting.lua index 5967c9e..d2f7525 100644 --- a/fabric_tree_farming_sorting.lua +++ b/fabric_tree_farming_sorting.lua @@ -2,21 +2,14 @@ if event.type == "program" then mem.events = {} end -if event ~= nil then - local e = mem.events - table.insert(mem.events, event) - -end - if event.type == "item" then local name = event.item.name - mem.name = name if name:find("sapling", 1, true) ~= nil then if event.side == "white" then digiline_send("treesort",{name="sapling", count=-event.item.count}) return "green" else - digiline_send("treesort",{name="sapling", count=event.item.count}) + digiline_send("treesort",{name="sapling", count=event.item.count}) return "white" end end diff --git a/scout_touchscreen.lua b/scout_touchscreen.lua new file mode 100644 index 0000000..ccc70db --- /dev/null +++ b/scout_touchscreen.lua @@ -0,0 +1,241 @@ +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="addbutton", + name="btnfired", + label="FireDown", + Y=5.2, X=5.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, + } +}) + +end + +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 + + +if event.type == "program" then + mem.position = {x = 0, y = 0, z=0} + mem.target = {x = 0, y = 0, z=0} + mem.step = 1 + mem.sim = false + mem.msg = "" + mem.powerstorage = 0 + mem.distance = 0 + mem.power_req = 0 + drawui() + updatepositionui() + digiline_send("jumpdrive", { + command = "get" + }) +--interrupt(2) +--elseif event.type == "interrupt" then +--- 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() + updatepositionui() +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 }) + end + + digiline_send("jumpdrive", { + command = "get" + }) +end \ No newline at end of file