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 camera = RenderEngine.camera
25 local front, right, up = camera.front, camera.right, camera.up
26 if not RenderEngine.pitch_move then
27 front = glm.vec3(front.x, 0, front.z):normalize()
28 up = glm.vec3(0, up.y, 0):normalize()
31 self:move( speed * front)
33 self:move(-speed * front)
36 self:move( speed * right)
38 self:move(-speed * right)
41 self:move( speed * up)
42 elseif keys["left shift"] then
43 self:move(-speed * up)
47 function LocalPlayer:mouse_move_callback(event)
48 self.yaw = self.yaw + event.x
49 self.pitch = self.pitch - event.y
53 function LocalPlayer:set_position_callback(event)
54 RenderEngine.camera.pos = self.pos
57 function LocalPlayer:move(vec)
58 self:set_position(self.pos + vec)
61 function LocalPlayer:set_fov(fov)
63 RenderEngine.fov = fov
66 function LocalPlayer:set_yaw(yaw)
71 function LocalPlayer:set_pitch(pitch)
76 function LocalPlayer:update_camera()
77 RenderEngine.camera:update(self.yaw or 0, self.pitch or 0)