Send FOV packets only when necessary

Before this change, about 10 to 30 FOV packets were sent from the server
to each connected client each second. This patch only sends FOV packets
when the FOV actually needs to be changed, i.e. when the player starts
or stops sprinting.
This commit is contained in:
Nils Dagsson Moskopp 2021-07-04 03:25:05 +02:00
parent 00ee2d5013
commit 275f0826ed
No known key found for this signature in database
GPG Key ID: A3BC671C35191080
1 changed files with 8 additions and 4 deletions

View File

@ -45,15 +45,19 @@ local function setSprinting(playerName, sprinting) --Sets the state of a player
local player = minetest.get_player_by_name(playerName) local player = minetest.get_player_by_name(playerName)
if players[playerName] then if players[playerName] then
players[playerName].sprinting = sprinting players[playerName].sprinting = sprinting
local fov_old = players[playerName].fov
local fov_new
if sprinting == true then if sprinting == true then
players[playerName].fov = math.min(players[playerName].fov + 0.05, 1.2) fov_new = math.min(players[playerName].fov + 0.05, 1.2)
player:set_fov(players[playerName].fov, true, 0.15)
playerphysics.add_physics_factor(player, "speed", "mcl_sprint:sprint", mcl_sprint.SPEED) playerphysics.add_physics_factor(player, "speed", "mcl_sprint:sprint", mcl_sprint.SPEED)
elseif sprinting == false then elseif sprinting == false then
players[playerName].fov = math.max(players[playerName].fov - 0.05, 1.0) fov_new = math.max(players[playerName].fov - 0.05, 1.0)
player:set_fov(players[playerName].fov, true, 0.15)
playerphysics.remove_physics_factor(player, "speed", "mcl_sprint:sprint") playerphysics.remove_physics_factor(player, "speed", "mcl_sprint:sprint")
end end
if fov_new ~= fov_old then
players[playerName].fov = fov_new
player:set_fov(fov_new, true, 0.15)
end
return true return true
end end
return false return false