]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - modules/PlayerSystem/src/localplayer.lua
d77811e84281d2e1b0e60e34654776799ea571a4
[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(4)
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_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")
18 end
19
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)
25         if keys["w"] then
26                 self:move( speed * yawvec)
27         elseif keys["s"] then
28                 self:move(-speed * yawvec)
29         end
30         if keys["a"] then
31                 self:move(-speed * (yawvec % pitchvec):normalize())
32         elseif keys["d"] then
33                 self:move( speed * (yawvec % pitchvec):normalize())
34         end
35         if keys["left shift"] then
36                 self:move(-speed * vertvec)
37         elseif keys["space"] then
38                 self:move( speed * vertvec)
39         end
40 end
41
42 function LocalPlayer:set_position_callback(event)
43         RenderEngine.camera.pos = self.pos
44 end
45
46 function LocalPlayer:move(vec)
47         self:set_position(self.pos + vec)
48 end
49
50 function LocalPlayer:set_fov(fov)
51         self.fov = fov
52         RenderEngine.fov = fov
53 end
54
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
59 end
60
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
65 end
66
67 return LocalPlayer