1 local LocalPlayer = Dragonblocks.create_class()
2 table.assign(LocalPlayer, PlayerSystem.Player)
4 function LocalPlayer:constructor()
10 self:add_event_listener("after_set_position", function(event) self:set_position_callback(event) end)
11 RenderEngine:add_event_listener("keypress", function(event) self:key_press_callback(event) end)
12 RenderEngine:add_event_listener("mousemove", function(event) self:mouse_move_callback(event) end)
13 RenderEngine:add_listen_key("w")
14 RenderEngine:add_listen_key("a")
15 RenderEngine:add_listen_key("s")
16 RenderEngine:add_listen_key("d")
17 RenderEngine:add_listen_key("space")
18 RenderEngine:add_listen_key("left shift")
21 function LocalPlayer:key_press_callback(event)
22 local keys = event.keys
23 local speed = self.speed * event.dtime
24 local hvec, vvec = self.horizontal_look, RenderEngine.camera.up
26 self:move( speed * hvec)
28 self:move(-speed * hvec)
31 self:move(-speed * (hvec % vvec):normalize())
33 self:move( speed * (hvec % vvec):normalize())
35 if keys["left shift"] then
36 self:move(-speed * vvec)
37 elseif keys["space"] then
38 self:move( speed * vvec)
42 function LocalPlayer:mouse_move_callback(event)
43 self.yaw = self.yaw - event.x
44 self.pitch = self.pitch - event.y
48 function LocalPlayer:set_position_callback(event)
49 RenderEngine.camera.pos = self.pos
52 function LocalPlayer:move(vec)
53 self:set_position(self.pos + vec)
56 function LocalPlayer:set_fov(fov)
58 RenderEngine.fov = fov
61 function LocalPlayer:set_yaw(yaw)
62 self.yaw = math.rad(yaw)
66 function LocalPlayer:set_pitch(pitch)
67 self.pitch = math.rad(pitch)
71 function LocalPlayer:update_look()
72 self.horizontal_look = glm.vec3(math.sin(self.yaw), 0, math.cos(self.yaw)):normalize()
73 RenderEngine.camera.front = glm.vec3(math.sin(self.yaw or 0), math.sin(self.pitch or 0), math.cos(self.yaw or 0)):normalize()