]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - modules/PlayerSystem/src/localplayer.lua
Improved Yaw & Pitch
[dragonblocks3d-lua.git] / modules / PlayerSystem / src / localplayer.lua
1 local LocalPlayer = Dragonblocks.create_class()
2 table.assign(LocalPlayer, PlayerSystem.Player)
3
4 function LocalPlayer:constructor()
5         self:init()
6         self:set_speed(10)
7         self:set_fov(86.1)
8         self:set_yaw(-90)
9         self:set_pitch(0)
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")
19 end
20
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()
29         end
30         if keys["w"] then
31                 self:move( speed * front)
32         elseif keys["s"] then
33                 self:move(-speed * front)
34         end
35         if keys["d"] then
36                 self:move( speed * right)
37         elseif keys["a"] then
38                 self:move(-speed * right)
39         end
40         if keys["space"] then
41                 self:move( speed * up)
42         elseif keys["left shift"] then
43                 self:move(-speed * up)
44         end
45 end
46
47 function LocalPlayer:mouse_move_callback(event)
48         self.yaw = self.yaw + event.x
49         self.pitch = self.pitch - event.y
50         self:update_camera()
51 end
52
53 function LocalPlayer:set_position_callback(event)
54         RenderEngine.camera.pos = self.pos
55 end
56
57 function LocalPlayer:move(vec)
58         self:set_position(self.pos + vec)
59 end
60
61 function LocalPlayer:set_fov(fov)
62         self.fov = fov
63         RenderEngine.fov = fov
64 end
65
66 function LocalPlayer:set_yaw(yaw)
67         self.yaw = yaw
68         self:update_camera()
69 end
70
71 function LocalPlayer:set_pitch(pitch)
72         self.pitch = pitch
73         self:update_camera()
74 end
75
76 function LocalPlayer:update_camera()
77         RenderEngine.camera:update(self.yaw or 0, self.pitch or 0)      
78 end
79
80 return LocalPlayer