os.loadAPI("/apis/storage")
local db = storage
local pos = {}
for _, k in ipairs({
"X", "Y", "Z", "F"
}) do
local v = db.get(k)
pos[k] = v and v - 0 or 0
end
local function horizontal (s)
local d = 0 == pos.F % 2 and "Z" or "X"
local c = 0 == pos.F % 3 and 1 or -1
pos[d] = pos[d] + c * s
db.set(d, pos[d])
end
function forward () horizontal(1) end
function back () horizontal(-1) end
local function turn (d)
pos.F = (pos.F + 4 + d) % 4
db.set("F", pos.F)
end
function turnRight () turn(1) end
function turnLeft () turn(-1) end
local function vertical (s)
pos.Y = pos.Y + s
db.set("Y", pos.Y)
end
function up () vertical(1) end
function down () vertical(-1) end
get = {
["X"] = function () return pos.X end,
["Y"] = function () return pos.Y end,
["Z"] = function () return pos.Z end,
["F"] = function () return pos.F end
}
function setHome ()
for i, d in ipairs({
"X", "Y", "Z", "F"
}) do
pos[d] = 0
db.set(d, 0)
end
end
function hook ()
local t = turtle
if t.position then return false end
t.position = {}
for i, v in ipairs({
"forward", "back", "up", "down",
"turnLeft", "turnRight"
}) do
t.position[v] = t[v]
t[v] = function ()
local ret = t.position[v]()
if ret then position[v]() end
return ret
end
end
return true
end