Skip to content

Instantly share code, notes, and snippets.

@xarses
Last active June 1, 2016 16:00
local sides = require('sides')
local facing = {index = 1}
--[[
sides = {north=2,
east=5,
south=3,
west=4}
--]]
function facing.roll(self, dist)
dist = dist or 0
pos = (self.index+dist)%4+1
return pos
end
function facing.turnRight(self)
self.index = self:roll()
return self:facing()
end
function facing.turnLeft(self)
self.index = self:roll(2)
return self:facing()
end
function facing.facing(self)
return facing.dirs[self.index]
end
function facing.getLeft(self)
return facing.dirs[self:roll(2)]
end
function facing.getRight(self)
return facing.dirs[self:roll()]
end
function facing.getBack(self)
return facing.dirs[self:roll(1)]
end
function facing.getSide(self, side)
if side == 0 or side == 1 then return sides[side]
elseif side == 2 then return self:getBack()
elseif side == 3 then return self:facing()
elseif side == 4 then return self:getRight()
elseif side == 5 then return self:getLeft()
end
end
function facing.__tostring(self)
return tostring(self:facing())
end
function facing.new(self, dir)
o = {index=dir or 1}
setmetatable(o, self)
self.__index = self
return o
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment