game.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. -- Move speed (m/s)
  2. MOVE_SPEED_NORMAL = 50
  3. MOVE_SPEED_FAST = 200
  4. -- Move flags
  5. MOVE_FORWARD = 1
  6. MOVE_BACKWARD = 2
  7. MOVE_RIGHT = 3
  8. MOVE_LEFT = 4
  9. _useScriptCamera = false
  10. _forwardSpeed = 0
  11. _sideSpeed = 0
  12. _touch = Vector2.new()
  13. _delta = Vector2.new()
  14. _move = Vector2.new()
  15. _moveFlags = { false, false, false, false }
  16. _yaw = 0
  17. _pitch = 0
  18. _shiftDown = false
  19. function setScene(scene)
  20. _scene = scene
  21. _cameraNode = scene:getActiveCamera():getNode()
  22. end
  23. function toggleCamera()
  24. _useScriptCamera = not _useScriptCamera
  25. end
  26. function initialize()
  27. end
  28. function finalize()
  29. end
  30. function update(elapsedTime)
  31. if not _useScriptCamera then
  32. return
  33. end
  34. local secs = elapsedTime / 1000.0
  35. _move:set(0,0)
  36. -- Forward motion
  37. if _moveFlags[MOVE_FORWARD] then
  38. _move:y(1)
  39. elseif _moveFlags[MOVE_BACKWARD] then
  40. _move:y(-1)
  41. end
  42. -- Strafing
  43. if _moveFlags[MOVE_LEFT] then
  44. _move:x(1)
  45. elseif _moveFlags[MOVE_RIGHT] then
  46. _move:x(-1)
  47. end
  48. if not _move:isZero() then
  49. local speed = MOVE_SPEED_NORMAL
  50. if _shiftDown then
  51. speed = MOVE_SPEED_FAST
  52. end
  53. _move:normalize():scale(secs * speed)
  54. moveForward(_move:y());
  55. moveRight(-_move:x());
  56. end
  57. end
  58. function render(elapsedTime)
  59. end
  60. function keyEvent(evt, key)
  61. if evt == Keyboard.KEY_PRESS then
  62. if key == Keyboard.KEY_W or key == Keyboard.KEY_CAPITAL_W then
  63. _moveFlags[MOVE_FORWARD] = true
  64. elseif key == Keyboard.KEY_S or key == Keyboard.KEY_CAPITAL_S then
  65. _moveFlags[MOVE_BACKWARD] = true
  66. elseif key == Keyboard.KEY_A or key == Keyboard.KEY_CAPITAL_A then
  67. _moveFlags[MOVE_LEFT] = true
  68. elseif key == Keyboard.KEY_D or key == Keyboard.KEY_CAPITAL_D then
  69. _moveFlags[MOVE_RIGHT] = true
  70. elseif key == Keyboard.KEY_C then
  71. _useScriptCamera = not _useScriptCamera
  72. elseif key == Keyboard.KEY_SHIFT then
  73. _shiftDown = true
  74. end
  75. elseif evt == Keyboard.KEY_RELEASE then
  76. if key == Keyboard.KEY_W or key == Keyboard.KEY_CAPITAL_W then
  77. _moveFlags[MOVE_FORWARD] = false
  78. elseif key == Keyboard.KEY_S or key == Keyboard.KEY_CAPITAL_S then
  79. _moveFlags[MOVE_BACKWARD] = false
  80. elseif key == Keyboard.KEY_A or key == Keyboard.KEY_CAPITAL_A then
  81. _moveFlags[MOVE_LEFT] = false
  82. elseif key == Keyboard.KEY_D or key == Keyboard.KEY_CAPITAL_D then
  83. _moveFlags[MOVE_RIGHT] = false
  84. elseif key == Keyboard.KEY_SHIFT then
  85. _shiftDown = false
  86. end
  87. end
  88. return false
  89. end
  90. function touchEvent(evt, x, y, contactIndex)
  91. if not _useScriptCamera then
  92. return
  93. end
  94. if evt == Touch.TOUCH_PRESS then
  95. _touch:set(x, y)
  96. elseif evt == Touch.TOUCH_RELEASE then
  97. elseif evt == Touch.TOUCH_MOVE then
  98. _delta:set(x - _touch:x(), y - _touch:y())
  99. _touch:set(x, y)
  100. _pitch = _pitch + -math.rad(_delta:y() * 0.5)
  101. _yaw = _yaw + math.rad(_delta:x() * 0.5)
  102. _cameraNode:setRotation(Quaternion.identity())
  103. _cameraNode:rotateY(-_yaw)
  104. _cameraNode:rotateX(_pitch)
  105. end
  106. return false
  107. end
  108. function moveForward(by)
  109. local v = _cameraNode:getForwardVector()
  110. v:normalize():scale(by)
  111. _cameraNode:translate(v)
  112. end
  113. function moveRight(by)
  114. local v = _cameraNode:getRightVector()
  115. v:normalize():scale(by)
  116. _cameraNode:translate(v)
  117. end