mirror of
https://github.com/osmarks/random-stuff
synced 2025-11-14 20:47:11 +00:00
add CC projects
This commit is contained in:
73
computercraft/3dgraph_master.lua
Normal file
73
computercraft/3dgraph_master.lua
Normal file
@@ -0,0 +1,73 @@
|
||||
local m = peripheral.find "modem"
|
||||
local CHAN = 7101
|
||||
m.open(CHAN)
|
||||
|
||||
local function send(ms) m.transmit(CHAN, CHAN, ms) end
|
||||
|
||||
local function receive()
|
||||
while true do
|
||||
local _, _, c, rc, ms = os.pullEvent "modem_message"
|
||||
if type(ms) == "table" then
|
||||
return ms
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local nodes = {}
|
||||
|
||||
parallel.waitForAny(function()
|
||||
send { "ping" }
|
||||
while true do
|
||||
local ty, id = unpack(receive())
|
||||
if ty == "pong" then
|
||||
print(id, "detected")
|
||||
table.insert(nodes, id)
|
||||
end
|
||||
end
|
||||
end, function() sleep(0.5) end)
|
||||
|
||||
local d_min = {202, 65, 231}
|
||||
local d_max = {202 + 63, 65 + 63, 231 + 63}
|
||||
local block = "botania:managlass"
|
||||
|
||||
local eqn = ...
|
||||
local fn, err = load(("local x, y, z = ...; return %s"):format(eqn), "=eqn", "t", math)
|
||||
if not fn then error("syntax error: " .. err, 0) end
|
||||
|
||||
print(#nodes, "nodes are available")
|
||||
|
||||
local x_range = d_max[1] - d_min[1] + 1
|
||||
local split = math.floor(x_range / #nodes)
|
||||
|
||||
local commands = {}
|
||||
local x_acc = d_min[1]
|
||||
for k, v in ipairs(nodes) do
|
||||
local x_size = split
|
||||
if k == #nodes then
|
||||
x_size = x_range - ((#nodes - 1) * split)
|
||||
end
|
||||
local t = x_acc
|
||||
x_acc = x_acc + x_size
|
||||
send {"plot", {
|
||||
x_min = d_min[1], x_max = d_max[1],
|
||||
y_min = d_min[2], y_max = d_max[2],
|
||||
z_min = d_min[3], z_max = d_max[3],
|
||||
x_mod = #nodes, x_mod_eq = k - 1,
|
||||
block = block,
|
||||
equation = eqn,
|
||||
id = v,
|
||||
f_min = d_min,
|
||||
f_max = d_max
|
||||
}}
|
||||
end
|
||||
|
||||
local responses = {}
|
||||
while #responses ~= #nodes do
|
||||
local m = receive()
|
||||
if m[1] == "response" then
|
||||
table.insert(responses, m[2])
|
||||
print("response from", m[2].id, m[2].response)
|
||||
end
|
||||
end
|
||||
|
||||
print "Plot plotted."
|
||||
Reference in New Issue
Block a user