Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Turtle extended
- - Keep up to date direction and positions x,y,z
- --# Inspired sources:
- --# Turtle Extended API v0.4
- --# Made By Wojbie
- --# http://pastebin.com/X8NEcEVy
- ]]--
- local iniFile = "./settings/turtle"
- if not turtle then
- error( "Cannot load turtle API on computer", 2 )
- end
- local oldturtle = turtle --Pointing local at global turtle (in case user overwrites it with this api)
- nativeTurtle=oldturtle --acces to basic turtle (in case user overwrites it with this api)
- -- GLOBALS
- settings.load(iniFile)
- local _pos = {}
- _pos.x = settings.get("turtle.pos.x",0) -- West-East axis / West = -1 / East = +1
- _pos.y = settings.get("turtle.pos.y",64)-- vertical axis / 63 = sea level / 1 = last lay of bedrock
- _pos.z = settings.get("turtle.pos.z",0) -- North-South axis / North = -1 / South = +1
- _pos.d = settings.get("turtle.pos.d",0) -- direction / 0 = North // 1 = East / 2 = South / 3 = West
- _pos.dx = 0
- _pos.dz = 0
- local _posUpdate = function()
- if _pos.d%2==1 then --Impair si l'axe est East/West
- _pos.dx = (_pos.d==1) and 1 or -1 -- +1 si la direction est East, sinon -1
- _pos.dz = 0 -- Reset de l'axe North/South
- else --Paire si l'axe est North/South
- _pos.dz = (_pos.d==0) and -1 or 1 -- -1 si la direction est North, sinon +1
- _pos.dx = 0 -- Reset de l'axe East/West
- end
- end
- pos = _pos -- Public read-only
- local function _setAndSave(name,value)
- settings.set(name,value)
- settings.save("/settings/position")
- pos = _pos
- end
- -- Init
- _posUpdate()
- reset = function(x,y,z,d)
- _pos.x = tonumber(x)
- _pos.y = tonumber(y)
- _pos.z = tonumber(z)
- local sD = string.lower(""..d)
- if sD=="n" then _pos.d = 0
- elseif sD=="e" then _pos.d = 1
- elseif sD=="s" then _pos.d = 2
- elseif sD=="w" then _pos.d = 3
- else _pos.d = tonumber(d)%4 end
- _posUpdate()
- settings.set("turtle.pos.d",_pos.d)
- settings.set("turtle.pos.x",_pos.x)
- settings.set("turtle.pos.y",_pos.y)
- settings.set("turtle.pos.z",_pos.z)
- settings.save(iniFile)
- end
- -- Extensions
- turnRight = function()
- if oldturtle.turnRight() then
- _pos.d = (_pos.d+1)%4
- -- _pos.d = _pos.d+1>4 and 0 or _pos.d+1 -- 10% moins performant
- _setAndSave("turtle.pos.d",_pos.d)
- _posUpdate()
- return true
- end
- return false
- end
- turnLeft = function()
- if oldturtle.turnLeft() then
- _pos.d = (_pos.d-1)%4
- _setAndSave("turtle.pos.d",_pos.d)
- _posUpdate()
- return true
- end
- return false
- end
- turnBack = function()
- turnLeft()
- turnLeft()
- end
- up = function()
- if oldturtle.up() then
- _pos.y = pos.y+1
- _setAndSave("turtle.pos.y",_pos.y)
- return true
- end
- return false
- end
- down = function()
- if oldturtle.down() then
- _pos.y = _pos.y-1
- _setAndSave("turtle.pos.y",_pos.y)
- return true
- end
- return false
- end
- forward = function()
- if oldturtle.forward() then
- _pos.x = pos.x+pos.dx -- pos.xd = -1 ou +1 selon l'orientation sur l'axe x. Vaut zéro si orienté sur l'axe z
- _pos.z = pos.z+pos.dz
- _setAndSave("turtle.pos.x",_pos.x)
- _setAndSave("turtle.pos.z",_pos.z)
- return true
- end
- return false
- end
- back = function()
- if oldturtle.back() then
- _pos.x = pos.x-pos.dx
- _pos.z = pos.z-pos.dz
- _setAndSave("turtle.pos.x",_pos.x)
- _setAndSave("turtle.pos.z",_pos.z)
- return true
- end
- return false
- end
- --## TURTLE FUNCTIONS DUPLICATOR ##--
- --in case this api is loaded onto turtle api.
- local env = _ENV
- for k,v in pairs( oldturtle ) do
- if not rawget(env, k) then env[k] = v end -- place the value defined before or use oldturtle one
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement