Lignum

Raycasting API Demo

Dec 14th, 2014
471
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.40 KB | None | 0 0
  1. os.unloadAPI(shell.resolve("ray"))
  2. os.loadAPI(shell.resolve("ray"))
  3.  
  4. term.clear()
  5. term.setCursorPos(1, 1)
  6.  
  7. local Raycaster = ray.newRaycaster(1, 1)
  8. Raycaster:loadFromFile(shell.resolve("demoMap"))
  9. Raycaster:setSkyColour(colours.lightGrey)
  10. Raycaster:setWallHeight(1.2)
  11. Raycaster:setCameraTransform(3, 5, 0)
  12.  
  13. local renderFunc = Raycaster.draw3D
  14.  
  15. local function toggleView()
  16.     if renderFunc == Raycaster.draw3D then
  17.         renderFunc = Raycaster.draw2D
  18.     else
  19.         renderFunc = Raycaster.draw3D
  20.     end
  21. end
  22.  
  23. os.queueEvent("key")
  24.  
  25. while true do
  26.     local e, key = os.pullEvent("key")
  27.     term.setBackgroundColour(colours.black)
  28.     term.clear()
  29.     term.setCursorPos(1, 1)
  30.    
  31.     local x, y, angle = Raycaster:getCameraTransform()
  32.     if key == keys.right then
  33.         Raycaster:setCameraTransform(x, y, angle + 5)
  34.     elseif key == keys.left then
  35.         Raycaster:setCameraTransform(x, y, angle - 5)
  36.     end
  37.  
  38.     if key == keys.up then
  39.         local nextX, nextY = x + math.cos(math.rad(angle)), y + math.sin(math.rad(angle))
  40.  
  41.         if Raycaster:getTile(nextX, nextY) == 0 then
  42.             Raycaster:setCameraTransform(nextX, nextY, angle)
  43.         end
  44.     elseif key == keys.down then
  45.         local nextX, nextY = x - math.cos(math.rad(angle)), y - math.sin(math.rad(angle))
  46.  
  47.         if Raycaster:getTile(nextX, nextY) == 0 then
  48.             Raycaster:setCameraTransform(nextX, nextY, angle)
  49.         end
  50.     end
  51.  
  52.     if key == keys.space then
  53.         toggleView()
  54.     end
  55.  
  56.     renderFunc(Raycaster, term)
  57. end
Advertisement
Add Comment
Please, Sign In to add comment