]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - modules/PlayerSystem/src/localplayer.lua
Yaw & Pitch bound to mouse input
[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(45)
8         self:set_yaw(180)
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 hvec, vvec = self.horizontal_look, RenderEngine.camera.up
25         if keys["w"] then
26                 self:move( speed * hvec)
27         elseif keys["s"] then
28                 self:move(-speed * hvec)
29         end
30         if keys["a"] then
31                 self:move(-speed * (hvec % vvec):normalize())
32         elseif keys["d"] then
33                 self:move( speed * (hvec % vvec):normalize())
34         end
35         if keys["left shift"] then
36                 self:move(-speed * vvec)
37         elseif keys["space"] then
38                 self:move( speed * vvec)
39         end
40 end
41
42 function LocalPlayer:mouse_move_callback(event)
43         self.yaw = self.yaw - event.x
44         self.pitch = self.pitch - event.y
45         self:update_look()
46 end
47
48 function LocalPlayer:set_position_callback(event)
49         RenderEngine.camera.pos = self.pos
50 end
51
52 function LocalPlayer:move(vec)
53         self:set_position(self.pos + vec)
54 end
55
56 function LocalPlayer:set_fov(fov)
57         self.fov = fov
58         RenderEngine.fov = fov
59 end
60
61 function LocalPlayer:set_yaw(yaw)
62         self.yaw = math.rad(yaw)
63         self:update_look()
64 end
65
66 function LocalPlayer:set_pitch(pitch)
67         self.pitch = math.rad(pitch)
68         self:update_look()
69 end
70
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()
74 end
75
76 return LocalPlayer