]> git.lizzy.rs Git - dragonblocks3d-lua.git/commitdiff
Improved Yaw & Pitch
authorElias Fleckenstein <eliasfleckenstein@web.de>
Tue, 11 Aug 2020 13:26:08 +0000 (15:26 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Tue, 11 Aug 2020 13:26:08 +0000 (15:26 +0200)
modules/Client/src/graphics.lua
modules/Client/src/init.lua
modules/PlayerSystem/src/localplayer.lua
modules/RenderEngine/src/camera.lua

index f4adc2a786c467817fd89695d3ba69ba85db63b2..338be6e5aca9b642e0d86e7345ce75fb1044f575 100644 (file)
@@ -5,7 +5,8 @@ function graphics:init()
        
        RenderEngine.bininear_filter = false
        RenderEngine.mipmap = false
-       RenderEngine.mouse_sensitivity = 0.012
+       RenderEngine.mouse_sensitivity = 0.7
+       --RenderEngine.pitch_move = true
        RenderEngine.mesh_effect_grow_time = 0.25
        RenderEngine.mesh_effect_flyin_time = 1
        RenderEngine.mesh_effect_flyin_offset = 20
index 728f6ec1462c6660a899c644ef762086d6379a42..ad7c81b96e1fba8984a6b333d43523f8501ef18b 100644 (file)
@@ -6,6 +6,6 @@ PlayerSystem:init("client")
 Client.map = WorldSystem.Map()
 Client.player = PlayerSystem.LocalPlayer()
 
-Client.player:set_position(glm.vec3(8, 18, 40))
+Client.player:set_position(glm.vec3(8, 20, 8))
 
 RenderEngine:render_loop()
index 873454190af275708be3abb054d2aafa9fa5dab4..d2e46a8e51ed1ab079390dc59cc903b12b3e826c 100644 (file)
@@ -4,8 +4,8 @@ table.assign(LocalPlayer, PlayerSystem.Player)
 function LocalPlayer:constructor()
        self:init()
        self:set_speed(10)
-       self:set_fov(45)
-       self:set_yaw(180)
+       self:set_fov(86.1)
+       self:set_yaw(-90)
        self:set_pitch(0)
        self:add_event_listener("after_set_position", function(event) self:set_position_callback(event) end)
        RenderEngine:add_event_listener("keypress", function(event) self:key_press_callback(event) end)
@@ -21,28 +21,33 @@ end
 function LocalPlayer:key_press_callback(event)
        local keys = event.keys
        local speed = self.speed * event.dtime
-       local hvec, vvec = self.horizontal_look, RenderEngine.camera.up
+       local camera = RenderEngine.camera
+       local front, right, up = camera.front, camera.right, camera.up
+       if not RenderEngine.pitch_move then
+               front = glm.vec3(front.x, 0, front.z):normalize()
+               up = glm.vec3(0, up.y, 0):normalize()
+       end
        if keys["w"] then
-               self:move( speed * hvec)
+               self:move( speed * front)
        elseif keys["s"] then
-               self:move(-speed * hvec)
+               self:move(-speed * front)
        end
-       if keys["a"] then
-               self:move(-speed * (hvec % vvec):normalize())
-       elseif keys["d"] then
-               self:move( speed * (hvec % vvec):normalize())
+       if keys["d"] then
+               self:move( speed * right)
+       elseif keys["a"] then
+               self:move(-speed * right)
        end
-       if keys["left shift"] then
-               self:move(-speed * vvec)
-       elseif keys["space"] then
-               self:move( speed * vvec)
+       if keys["space"] then
+               self:move( speed * up)
+       elseif keys["left shift"] then
+               self:move(-speed * up)
        end
 end
 
 function LocalPlayer:mouse_move_callback(event)
-       self.yaw = self.yaw - event.x
+       self.yaw = self.yaw + event.x
        self.pitch = self.pitch - event.y
-       self:update_look()
+       self:update_camera()
 end
 
 function LocalPlayer:set_position_callback(event)
@@ -59,18 +64,17 @@ function LocalPlayer:set_fov(fov)
 end
 
 function LocalPlayer:set_yaw(yaw)
-       self.yaw = math.rad(yaw)
-       self:update_look()
+       self.yaw = yaw
+       self:update_camera()
 end
 
 function LocalPlayer:set_pitch(pitch)
-       self.pitch = math.rad(pitch)
-       self:update_look()
+       self.pitch = pitch
+       self:update_camera()
 end
 
-function LocalPlayer:update_look()
-       self.horizontal_look = glm.vec3(math.sin(self.yaw), 0, math.cos(self.yaw)):normalize()
-       RenderEngine.camera.front = glm.vec3(math.sin(self.yaw or 0), math.sin(self.pitch or 0), math.cos(self.yaw or 0)):normalize()
+function LocalPlayer:update_camera()
+       RenderEngine.camera:update(self.yaw or 0, self.pitch or 0)      
 end
 
 return LocalPlayer
index c3236f7e2122443cee303b507c73862065c6b87b..012e3d949fba7170e58f3ee0a6bcedd0a40841f8 100644 (file)
@@ -1,11 +1,20 @@
 local camera = {
        pos = glm.vec3(0, 0, 0),
-       front = glm.vec3(1, 0, 0),
        up = glm.vec3(0, 1, 0),
+       world_up = glm.vec3(0, 1, 0),
+       front = glm.vec3(0, 0, -1),
 }
 
 function camera:get_view_matrix()
        return glm.look_at(self.pos, self.pos + self.front, self.up)
 end
 
+function camera:update(yaw, pitch)
+       yaw, pitch = math.rad(yaw), math.rad(glm.clamp(pitch, -89.0, 89.0))
+       self.front = glm.vec3(math.cos(yaw)*math.cos(pitch), math.sin(pitch), math.sin(yaw)*math.cos(pitch)):normalize()
+       --self.front = glm.vec3(math.cos(yaw), math.sin(pitch), math.sin(yaw)):normalize()
+       self.right = (self.front % self.world_up):normalize()
+       self.up = (self.right % self.front):normalize()
+end
+
 return camera