1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
require 'honey.std'
return function(entities, id, dt)
local self = honey.ecs.Accessor(entities, id)
local pressed = function(key)
return glfw.GetKey(window.win, key) == glfw.PRESS
end
local yaw = math.rad(
self.node._child.p
.node._child.pivot
.pitchyaw.yaw)
local forward = Vec3{-math.sin(yaw), 0, -math.cos(yaw)}
local left = Vec3{-math.cos(yaw), 0, math.sin(yaw)}
local vel = Vec3{0,0,0}
if pressed(glfw.KEY_W) then
vel = vel + forward
end
if pressed(glfw.KEY_A) then
vel = vel + left
end
if pressed(glfw.KEY_S) then
vel = vel - forward
end
if pressed(glfw.KEY_D) then
vel = vel - left
end
vel = 1000 * vel:normalize()
x, y, z = ode.BodyGetLinearVel(self.physics._body)
if Vec3{x,y,z}:norm2() < 500 then
ode.BodyAddForce(self.physics._body, vel[1], vel[2], vel[3])
end
end
|