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
55 local pos = WorldSystem.Map.get_chunk_pos(self.pos)
56 for x = pos.x - 1, pos.x + 1 do
57 for y = pos.y - 1, pos.y + 1 do
58 for z = pos.z - 1, pos.z + 1 do
59 Client.map:create_chunk_if_not_exists(glm.vec3(x, y, z))
65 function LocalPlayer:move(vec)
66 self:set_position(self.pos + vec)
69 function LocalPlayer:set_fov(fov)
71 RenderEngine.fov = fov
74 function LocalPlayer:set_yaw(yaw)
79 function LocalPlayer:set_pitch(pitch)
84 function LocalPlayer:update_camera()
85 RenderEngine.camera:update(self.yaw or 0, self.pitch or 0)