Advertisement
skypop

turtle

Sep 8th, 2016
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.49 KB | None | 0 0
  1. --[[
  2. Turtle extended
  3.     - Keep up to date direction and positions x,y,z
  4.  
  5. --# Inspired sources:
  6. --# Turtle Extended API v0.4
  7. --# Made By Wojbie
  8. --# http://pastebin.com/X8NEcEVy
  9. ]]--
  10.  
  11. local iniFile = "./settings/turtle"
  12.  
  13. if not turtle then
  14.     error( "Cannot load turtle API on computer", 2 )
  15. end
  16. local oldturtle = turtle --Pointing local at global turtle (in case user overwrites it with this api)
  17. nativeTurtle=oldturtle --acces to basic turtle (in case user overwrites it with this api)
  18.  
  19. -- GLOBALS
  20. settings.load(iniFile)
  21. local _pos = {}
  22. _pos.x = settings.get("turtle.pos.x",0) -- West-East axis / West = -1 / East = +1
  23. _pos.y = settings.get("turtle.pos.y",64)-- vertical axis / 63 = sea level / 1 = last lay of bedrock
  24. _pos.z = settings.get("turtle.pos.z",0) -- North-South axis / North = -1 / South = +1
  25. _pos.d = settings.get("turtle.pos.d",0) -- direction / 0 = North // 1 = East / 2 = South / 3 = West
  26. _pos.dx = 0
  27. _pos.dz = 0
  28. local _posUpdate = function()
  29.     if _pos.d%2==1 then --Impair si l'axe est East/West
  30.         _pos.dx = (_pos.d==1) and 1 or -1 -- +1 si la direction est East, sinon -1
  31.         _pos.dz = 0 -- Reset de l'axe North/South
  32.     else --Paire si l'axe est North/South
  33.         _pos.dz = (_pos.d==0) and -1 or 1 -- -1 si la direction est North, sinon +1
  34.         _pos.dx = 0 -- Reset de l'axe East/West
  35.     end
  36. end
  37. pos = _pos -- Public read-only
  38. local function _setAndSave(name,value)
  39.     settings.set(name,value)
  40.     settings.save("/settings/position")
  41.     pos = _pos
  42. end
  43. -- Init
  44. _posUpdate()
  45. reset = function(x,y,z,d)
  46.     _pos.x = tonumber(x)
  47.     _pos.y = tonumber(y)
  48.     _pos.z = tonumber(z)
  49.     local sD = string.lower(""..d)
  50.         if sD=="n" then _pos.d = 0
  51.     elseif sD=="e" then _pos.d = 1
  52.     elseif sD=="s" then _pos.d = 2
  53.     elseif sD=="w" then _pos.d = 3
  54.     else   _pos.d = tonumber(d)%4 end
  55.     _posUpdate()
  56.     settings.set("turtle.pos.d",_pos.d)
  57.     settings.set("turtle.pos.x",_pos.x)
  58.     settings.set("turtle.pos.y",_pos.y)
  59.     settings.set("turtle.pos.z",_pos.z)
  60.     settings.save(iniFile)
  61. end
  62. -- Extensions
  63.  
  64. turnRight = function()
  65.     if oldturtle.turnRight() then
  66.         _pos.d = (_pos.d+1)%4
  67. --      _pos.d = _pos.d+1>4 and 0 or _pos.d+1 -- 10% moins performant
  68.         _setAndSave("turtle.pos.d",_pos.d)
  69.         _posUpdate()
  70.         return true
  71.     end
  72.     return false
  73. end
  74.  
  75.  
  76. turnLeft = function()
  77.     if oldturtle.turnLeft() then
  78.         _pos.d = (_pos.d-1)%4
  79.         _setAndSave("turtle.pos.d",_pos.d)
  80.         _posUpdate()
  81.         return true
  82.     end
  83.     return false
  84. end
  85.  
  86. turnBack = function()
  87.     turnLeft()
  88.     turnLeft()
  89. end
  90.  
  91.  
  92. up = function()
  93.     if oldturtle.up() then
  94.         _pos.y = pos.y+1
  95.         _setAndSave("turtle.pos.y",_pos.y)
  96.         return true
  97.     end
  98.     return false
  99. end
  100.  
  101.  
  102. down = function()
  103.     if oldturtle.down() then
  104.         _pos.y = _pos.y-1
  105.         _setAndSave("turtle.pos.y",_pos.y)
  106.         return true
  107.     end
  108.     return false
  109. end
  110.  
  111.  
  112. forward = function()
  113.     if oldturtle.forward() then
  114.         _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
  115.         _pos.z = pos.z+pos.dz
  116.         _setAndSave("turtle.pos.x",_pos.x)
  117.         _setAndSave("turtle.pos.z",_pos.z)
  118.         return true
  119.     end
  120.     return false
  121. end
  122.  
  123. back = function()
  124.     if oldturtle.back() then
  125.         _pos.x = pos.x-pos.dx
  126.         _pos.z = pos.z-pos.dz
  127.         _setAndSave("turtle.pos.x",_pos.x)
  128.         _setAndSave("turtle.pos.z",_pos.z)
  129.         return true
  130.     end
  131.     return false
  132. end
  133.  
  134.  
  135. --##     TURTLE FUNCTIONS DUPLICATOR     ##--
  136. --in case this api is loaded onto turtle api.
  137.  
  138. local env = _ENV
  139. for k,v in pairs( oldturtle ) do
  140.     if not rawget(env, k) then env[k] = v end -- place the value defined before or use oldturtle one
  141. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement