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_listen_key("w")
13 RenderEngine:add_listen_key("a")
14 RenderEngine:add_listen_key("s")
15 RenderEngine:add_listen_key("d")
16 RenderEngine:add_listen_key("space")
17 RenderEngine:add_listen_key("left shift")
20 function LocalPlayer:key_press_callback(event)
21 local keys = event.keys
22 local speed = self.speed * event.dtime
23 local yawvec, pitchvec = self.yaw_vector, self.pitch_vector
24 local vertvec = glm.vec3(0, 1, 0)
26 self:move( speed * yawvec)
28 self:move(-speed * yawvec)
31 self:move(-speed * (yawvec % pitchvec):normalize())
33 self:move( speed * (yawvec % pitchvec):normalize())
35 if keys["left shift"] then
36 self:move(-speed * vertvec)
37 elseif keys["space"] then
38 self:move( speed * vertvec)
42 function LocalPlayer:set_position_callback(event)
43 RenderEngine.camera.pos = self.pos
46 function LocalPlayer:move(vec)
47 self:set_position(self.pos + vec)
50 function LocalPlayer:set_fov(fov)
52 RenderEngine.fov = fov
55 function LocalPlayer:set_yaw(degrees)
56 local radians = math.rad(degrees)
57 self.yaw_vector = glm.vec3(math.sin(radians), 0, math.cos(radians)):normalize()
58 RenderEngine.camera.front = self.yaw_vector
61 function LocalPlayer:set_pitch(degrees)
62 local radians = math.rad(degrees)
63 self.pitch_vector = glm.vec3(0, 1, 0)
64 RenderEngine.camera.up = self.pitch_vector