add robot prototype
This commit is contained in:
31
bricks/special/robot-input.lua
Normal file
31
bricks/special/robot-input.lua
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
local function intToPort(gate, port, len, v)
|
||||
for i = 1, len do
|
||||
local p = math.pow(2, i-1)
|
||||
Gate.setportstate(gate, port+i-1, math.floor(v/p)%2)
|
||||
end
|
||||
end
|
||||
|
||||
return function(gate, argv)
|
||||
for word in argv[1]:gmatch("[^\t]+") do
|
||||
local first, rest = word:sub(1, 1), word:sub(2, #word)
|
||||
local vec = {}
|
||||
for a in rest:gmatch("[^ ]+") do table.insert(vec, tonumber(a) or error("invalid number "..a)) end
|
||||
if first=="P" then -- set position
|
||||
assert(#vec==3, "invalid position given to robot: "..word)
|
||||
brick.robotpos = vec
|
||||
elseif first=="B" then -- detected brick info
|
||||
assert(#vec==7, "invalid brick info given to robot: "..word)
|
||||
gate.brickexists = vec[1]
|
||||
gate.brickcolor = vec[2]
|
||||
gate.brickcolorfx = vec[3]
|
||||
gate.brickshapefx = vec[4]
|
||||
gate.brickray = vec[5]
|
||||
gate.brickcol = vec[6]
|
||||
gate.brickren = vec[7]
|
||||
intToPort(gate, 15, 6, gate.brickcolor)
|
||||
Gate.setportstate(gate, 21, gate.brickexists)
|
||||
else error("invalid control word given to robot: "..word) end
|
||||
end
|
||||
gate.waiting = false
|
||||
end
|
||||
Reference in New Issue
Block a user