main.lua 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. lovr.mouse = require 'lovr-mouse'
  2. function lovr.load()
  3. lovr.mouse.setRelativeMode(true)
  4. camera = {
  5. transform = lovr.math.newMat4(),
  6. position = vector(),
  7. movespeed = 10,
  8. pitch = 0,
  9. yaw = 0
  10. }
  11. end
  12. function lovr.update(dt)
  13. local vx, vy, vz = 0, 0, 0
  14. if lovr.system.isKeyDown('w', 'up') then
  15. vz = -1
  16. elseif lovr.system.isKeyDown('s', 'down') then
  17. vz = 1
  18. end
  19. if lovr.system.isKeyDown('a', 'left') then
  20. vx = -1
  21. elseif lovr.system.isKeyDown('d', 'right') then
  22. vx = 1
  23. end
  24. local velocity = vector(vx, vy, vz)
  25. if velocity:length() > 0 then
  26. velocity = velocity:normalize() * camera.movespeed * dt
  27. camera.position = camera.position + camera.transform:mul(velocity, 0) -- Just apply transform's rotation to velocity
  28. end
  29. camera.transform:identity()
  30. camera.transform:translate(0, 1.7, 0)
  31. camera.transform:translate(camera.position)
  32. camera.transform:rotate(camera.yaw, 0, 1, 0)
  33. camera.transform:rotate(camera.pitch, 1, 0, 0)
  34. end
  35. function lovr.draw(pass)
  36. pass:push()
  37. pass:setViewPose(1, camera.transform)
  38. pass:setColor(0xff0000)
  39. pass:cube(0, 1.7, -3, .5, lovr.timer.getTime())
  40. pass:setColor(0xffffff)
  41. pass:plane(0, 0, 0, 10, 10, math.pi / 2, 1, 0, 0)
  42. pass:pop()
  43. end
  44. function lovr.mousemoved(x, y, dx, dy)
  45. camera.pitch = camera.pitch - dy * .004
  46. camera.yaw = camera.yaw - dx * .004
  47. end
  48. function lovr.keypressed(key)
  49. if key == 'escape' then
  50. lovr.event.quit()
  51. end
  52. end