added pova.do_override() and 'pova_loop' setting.

This commit is contained in:
TenPlus1 2018-04-19 09:30:11 +01:00
parent 4437d6653e
commit 630d680379
5 changed files with 103 additions and 61 deletions

44
README.md Normal file
View File

@ -0,0 +1,44 @@
# POVA
Pova gives mod makers a set of functions that safely apply overrides for player
speed, jump height and gravity effects.
## Settings
'pova_loop' setting is true by default and will calculate and set overrides
once a second for each player.
## Functions
- pova.set_override_defaults = function(name, def)
Sets default speed, jump and gravity for a player.
- pova.add_override = function(name, item, def)
Adds a named override which can add or remove from speed, jump and gravity.
- pova.get_override = function(name, item)
Returns the table containing {speed, jump, gravity} for the added item.
- pova.del_override = function(name, item)
Removes the settings for the named item.
- pova.do_override(player)
Calculates and sets new overrides instantly, this can be used when the
'pova_loop' setting is false.
## Changelog
### 0.1
- Initial Upload
### 0.2
- Added pova.do_override(player) to instantly set overrides on list.
- Added 'pova_loop' setting in minetest.conf to disable override calc loop

21
api.txt
View File

@ -1,21 +0,0 @@
Command function list:
pova.set_override_defaults = function(name, def)
Sets default speed, jump and gravity for a player.
pova.add_override = function(name, item, def)
Adds a named override which can add or remove from speed, jump and gravity.
pova.get_override = function(name, item)
Returns the table containing {speed, jump, gravity} for the added item
pova.del_override = function(name, item)
Removes the settings for the named item

1
description.txt Normal file
View File

@ -0,0 +1 @@
Pova gives mod makers a set of functions to safely apply overrides for player speed, jump height and gravity.

View File

@ -5,17 +5,22 @@ pova = {}
-- local
local pova_list = {}
-- do we want override loop enabled to apply changes every second?
local pova_loop = minetest.settings:get_bool("pova_loop") ~= false
-- set player table and defaults on join
minetest.register_on_joinplayer(function(player)
pova_list[ player:get_player_name() ] = {
default = {speed = 1, jump = 1, gravity = 1}}
pova.do_override(player)
end)
-- reset player table and defaults on respawn
minetest.register_on_respawnplayer(function(player)
pova_list[ player:get_player_name() ] = {
default = {speed = 1, jump = 1, gravity = 1}}
pova.do_override(player)
end)
-- blank player table on leave
@ -36,7 +41,7 @@ end
pova.get_override = function(name, item)
if item == "default" then return end
return pova[name][item]
return pova_list[name][item]
end
pova.del_override = function(name, item)
@ -44,54 +49,60 @@ pova.del_override = function(name, item)
pova_list[name][item] = nil
end
pova.do_override = function(player)
-- main counter that runs every second and totals override list
local timer = 0
minetest.register_globalstep(function(dtime)
local name = player:get_player_name()
timer = timer + dtime
if name and pova_list[name] then
-- every 1 second
if timer < 1 then
return
end
-- check for new defaults
local speed = pova_list[name]["default"].speed or 1
local jump = pova_list[name]["default"].jump or 1
local gravity = pova_list[name]["default"].gravity or 1
-- reset time for next check
timer = 0
for id, var in pairs(pova_list[name]) do
-- define locals outside loop
local name, speed, jump, gravity
if var and id ~= "default" then
-- loop through players
for _,player in ipairs(minetest.get_connected_players()) do
name = player:get_player_name()
if pova_list[name] then
-- check for new defaults
speed = pova_list[name]["default"].speed or 1
jump = pova_list[name]["default"].jump or 1
gravity = pova_list[name]["default"].gravity or 1
for id, var in pairs(pova_list[name]) do
if var and id ~= "default" then
-- add any additional changes
speed = speed + (pova_list[name][id].speed or 0)
jump = jump + (pova_list[name][id].jump or 0)
gravity = gravity + (pova_list[name][id].gravity or 0)
end
-- add any additional changes
speed = speed + (pova_list[name][id].speed or 0)
jump = jump + (pova_list[name][id].jump or 0)
gravity = gravity + (pova_list[name][id].gravity or 0)
end
print ("speed: " .. speed .. " / jump: " .. jump .. " / gravity: " .. gravity)
player:set_physics_override(speed, jump, gravity)
end
-- for testing only
if name == "singleplayer" then
print ("speed: " .. speed .. " / jump: " .. jump .. " / gravity: " .. gravity)
end
player:set_physics_override(speed, jump, gravity)
end
end)
end
-- main counter that runs every second and totals override list (if enabled)
if pova_loop then
local timer = 0
minetest.register_globalstep(function(dtime)
timer = timer + dtime
-- every 1 second
if timer < 1 then
return
end
-- reset time for next check
timer = 0
-- loop through players and apply overrides
for _,player in ipairs(minetest.get_connected_players()) do
pova.do_override(player)
end
end)
end
-- axe tool to change defaults and add changes to table
@ -111,6 +122,9 @@ minetest.register_craftitem("pova:axe", {
-- define changes that are added onto defaults
pova.add_override(name, "test", {
speed = 1, jump = 2, gravity = 0.5})
-- apply override
pova.do_override(user)
end,
on_place = function(itemstack, user, pointed_thing)
@ -123,5 +137,8 @@ minetest.register_craftitem("pova:axe", {
-- remove changes
pova.del_override(name, "test")
-- apply override
pova.do_override(user)
end,
})

1
mod.conf Normal file
View File

@ -0,0 +1 @@
name = pova