Add files
This commit is contained in:
131
location
Normal file
131
location
Normal file
@@ -0,0 +1,131 @@
|
||||
-- a slightly modified version of an API I found somewhere
|
||||
-- the headings have been altered to use the Minecraft directions
|
||||
local location = {
|
||||
add = function(self, o)
|
||||
return vector.new(
|
||||
self.x + o.x,
|
||||
self.y + o.y,
|
||||
self.z + o.z
|
||||
)
|
||||
end,
|
||||
sub = function(self, o)
|
||||
return vector.new(
|
||||
self.x - o.x,
|
||||
self.y - o.y,
|
||||
self.z - o.z
|
||||
)
|
||||
end,
|
||||
mul = function(self, m)
|
||||
return vector.new(
|
||||
self.x * m,
|
||||
self.y * m,
|
||||
self.z * m
|
||||
)
|
||||
end,
|
||||
div = function(self, d)
|
||||
return vector.new(
|
||||
self.x / d,
|
||||
self.y / d,
|
||||
self.z / d
|
||||
)
|
||||
end,
|
||||
left = function(self)
|
||||
if turtle.turnLeft() then
|
||||
self.h = (self.h - 1) % 4
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
right = function(self)
|
||||
if turtle.turnRight() then
|
||||
self.h = (self.h + 1) % 4
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
forward = function(self)
|
||||
if turtle.forward() then
|
||||
self.x = self.x + (self.h - 2) * (self.h % 2)
|
||||
self.z = self.z + (1 - self.h) * ((self.h + 1) % 2)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
back = function(self)
|
||||
if turtle.back() then
|
||||
self.x = self.x - (self.h - 2) * (self.h % 2)
|
||||
self.z = self.z - (1 - self.h) * ((self.h + 1) % 2)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
up = function(self)
|
||||
if turtle.up() then
|
||||
self.y = self.y + 1
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
down = function(self)
|
||||
if turtle.down() then
|
||||
self.y = self.y - 1
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
moveDeltas = function(self)
|
||||
return (self.h - 2) * (self.h % 2), (1 - self.h) * ((self.h + 1) % 2)
|
||||
end,
|
||||
setHeading = function(self, heading)
|
||||
if not heading or heading < 0 or heading > 3 then return nil, "Heading Not in Range" end
|
||||
while self.h ~= heading do
|
||||
if (self.h + 1) % 4 == heading % 4 then
|
||||
self:right()
|
||||
else
|
||||
self:left()
|
||||
end
|
||||
end
|
||||
return true
|
||||
end,
|
||||
getHeading = function(self)
|
||||
return self.h
|
||||
end,
|
||||
tovector = function(self)
|
||||
if vector then
|
||||
return vector.new(
|
||||
self.x,
|
||||
self.y,
|
||||
self.z
|
||||
)
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end,
|
||||
tostring = function(self)
|
||||
return self.x..","..self.y..","..self.z..","..self.h
|
||||
end,
|
||||
value = function(self)
|
||||
return self.x, self.y, self.z, self.h
|
||||
end,
|
||||
}
|
||||
|
||||
local lmetatable = {
|
||||
__index = location,
|
||||
__add = location.add,
|
||||
__sub = location.sub,
|
||||
__mul = location.mul,
|
||||
__div = location.div,
|
||||
__unm = function(l) return l:mul(-1) end,
|
||||
__tostring = function(l) return l:tostring() end,
|
||||
}
|
||||
|
||||
function new( x, y, z, h )
|
||||
local l = {
|
||||
x = x or 0,
|
||||
y = y or 0,
|
||||
z = z or 0,
|
||||
h = h or 1
|
||||
}
|
||||
setmetatable( l, lmetatable )
|
||||
return l
|
||||
end
|
||||
Reference in New Issue
Block a user