Heavily optimize data usage with player_api

This commit is contained in:
oilboi 2020-06-09 18:36:12 -04:00
parent 6d2a897e1b
commit 5bbda73fc2
2 changed files with 47 additions and 25 deletions

View file

@ -108,18 +108,36 @@ end
-- Check each player and apply animations -- Check each player and apply animations
minetest.register_globalstep(function() minetest.register_globalstep(function()
for _, player in pairs(minetest.get_connected_players()) do for _, player in pairs(minetest.get_connected_players()) do
-- Check if the player's control state has changed
local meta = player:get_meta()
local controls = player:get_player_control()
local control_table = meta:get_string("player_api_old_controls")
local player_input_changed = false
if control_table ~= "" then
control_table = minetest.deserialize(control_table)
for index,boolean in pairs(control_table) do
if controls[index] ~= boolean then
player_input_changed = true
break
end
end
else
player_input_changed = true
end
if player_input_changed then
-- Serialize old control state to be used in next server step
meta:set_string("player_api_old_controls",minetest.serialize(controls))
local name = player:get_player_name() local name = player:get_player_name()
local model_name = player_model[name] local model_name = player_model[name]
local model = model_name and models[model_name] local model = model_name and models[model_name]
if model and not player_attached[name] then if model and not player_attached[name] then
local controls = player:get_player_control() local controls = player:get_player_control()
local animation_speed_mod = model.animation_speed or 30 local animation_speed_mod = model.animation_speed or 30
-- Determine if the player is sneaking, and reduce animation speed if so -- Determine if the player is sneaking, and reduce animation speed if so
if controls.sneak then if controls.sneak then
animation_speed_mod = animation_speed_mod / 2 animation_speed_mod = animation_speed_mod / 2
end end
-- Apply animations based on what the player is doing -- Apply animations based on what the player is doing
if player:get_hp() == 0 then if player:get_hp() == 0 then
player_set_animation(player, "lay") player_set_animation(player, "lay")
@ -141,4 +159,5 @@ minetest.register_globalstep(function()
end end
end end
end end
end
end) end)

View file

@ -31,4 +31,7 @@ minetest.register_on_joinplayer(function(player)
{x = 200, y = 219}, {x = 200, y = 219},
30 30
) )
-- Remove old player controls when they join
local meta = player:get_meta()
meta:set_string("player_api_old_controls", "")
end) end)