Added physics_manager
This commit is contained in:
parent
666c369438
commit
fb48f5bd53
44
mods/physics_manager/init.lua
Normal file
44
mods/physics_manager/init.lua
Normal file
@ -0,0 +1,44 @@
|
||||
-- 0 is the lowest priority
|
||||
-- inf is the highest priority
|
||||
|
||||
local player_physics_table = {}
|
||||
|
||||
local function check_for_entry(pName)
|
||||
if player_physics_table[pName] == nil then
|
||||
local p = minetest.get_player_by_name(pName)
|
||||
if p then
|
||||
local pTable = p:get_physics_override()
|
||||
else
|
||||
local pTable = {speed = 1, jump = 1, gravity = 1, sneak = true, sneak_glitch = true, new_move = false}
|
||||
end
|
||||
player_physics_table[pName] = {default = {priority = 0, physics = pTable}}
|
||||
end
|
||||
end
|
||||
|
||||
local function update_physics(player)
|
||||
local n = player:get_player_name()
|
||||
local requests = player_physics_table[n].physics
|
||||
local highestPriority = -1
|
||||
local highest = nil
|
||||
for id, pTable in pairs(requests) do
|
||||
if pTable.priority > highestPriority then
|
||||
highestPriority = pTable.priority
|
||||
highest = pTable.physics
|
||||
end
|
||||
end
|
||||
player:set_physics_override(highest)
|
||||
end
|
||||
|
||||
function set_player_physics(player, phys, priority, id)
|
||||
local pName = player:get_player_name()
|
||||
check_for_entry(pName)
|
||||
player_physics_table[pName][id] = {priority = priority, physics = phys}
|
||||
update_physics(player)
|
||||
end
|
||||
|
||||
function reset_player_physics(player, id)
|
||||
local pName = player:get_player_name()
|
||||
check_for_entry(pName)
|
||||
player_physics_table[pName][id] = nil
|
||||
update_physics(player)
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user