main.lua 1.5 KB

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