]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - modules/PlayerSystem/src/localplayer.lua
Dynamic World System
[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(-80)
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         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))
60                         end
61                 end
62         end     
63 end
64
65 function LocalPlayer:move(vec)
66         self:set_position(self.pos + vec)
67 end
68
69 function LocalPlayer:set_fov(fov)
70         self.fov = fov
71         RenderEngine.fov = fov
72 end
73
74 function LocalPlayer:set_yaw(yaw)
75         self.yaw = yaw
76         self:update_camera()
77 end
78
79 function LocalPlayer:set_pitch(pitch)
80         self.pitch = pitch
81         self:update_camera()
82 end
83
84 function LocalPlayer:update_camera()
85         RenderEngine.camera:update(self.yaw or 0, self.pitch or 0)      
86 end
87
88 return LocalPlayer