main.lua 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. lovr.mouse = require 'lovr-mouse'
  2. function lovr.load()
  3. lovr.mouse.setRelativeMode(true)
  4. camera = {
  5. transform = lovr.math.newMat4(),
  6. position = lovr.math.newVec3(),
  7. movespeed = 10,
  8. pitch = 0,
  9. yaw = 0
  10. }
  11. end
  12. function lovr.update(dt)
  13. local velocity = vec4()
  14. if lovr.system.isKeyDown('w', 'up') then
  15. velocity.z = -1
  16. elseif lovr.system.isKeyDown('s', 'down') then
  17. velocity.z = 1
  18. end
  19. if lovr.system.isKeyDown('a', 'left') then
  20. velocity.x = -1
  21. elseif lovr.system.isKeyDown('d', 'right') then
  22. velocity.x = 1
  23. end
  24. if #velocity > 0 then
  25. velocity:normalize()
  26. velocity:mul(camera.movespeed * dt)
  27. camera.position:add(camera.transform:mul(velocity).xyz)
  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