added pova.do_override() and 'pova_loop' setting.
This commit is contained in:
parent
4437d6653e
commit
630d680379
44
README.md
Normal file
44
README.md
Normal 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
21
api.txt
@ -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
1
description.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Pova gives mod makers a set of functions to safely apply overrides for player speed, jump height and gravity.
|
97
init.lua
97
init.lua
@ -5,17 +5,22 @@ pova = {}
|
|||||||
-- local
|
-- local
|
||||||
local pova_list = {}
|
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
|
-- set player table and defaults on join
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
pova_list[ player:get_player_name() ] = {
|
pova_list[ player:get_player_name() ] = {
|
||||||
default = {speed = 1, jump = 1, gravity = 1}}
|
default = {speed = 1, jump = 1, gravity = 1}}
|
||||||
|
pova.do_override(player)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- reset player table and defaults on respawn
|
-- reset player table and defaults on respawn
|
||||||
minetest.register_on_respawnplayer(function(player)
|
minetest.register_on_respawnplayer(function(player)
|
||||||
pova_list[ player:get_player_name() ] = {
|
pova_list[ player:get_player_name() ] = {
|
||||||
default = {speed = 1, jump = 1, gravity = 1}}
|
default = {speed = 1, jump = 1, gravity = 1}}
|
||||||
|
pova.do_override(player)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- blank player table on leave
|
-- blank player table on leave
|
||||||
@ -36,7 +41,7 @@ end
|
|||||||
|
|
||||||
pova.get_override = function(name, item)
|
pova.get_override = function(name, item)
|
||||||
if item == "default" then return end
|
if item == "default" then return end
|
||||||
return pova[name][item]
|
return pova_list[name][item]
|
||||||
end
|
end
|
||||||
|
|
||||||
pova.del_override = function(name, item)
|
pova.del_override = function(name, item)
|
||||||
@ -44,54 +49,60 @@ pova.del_override = function(name, item)
|
|||||||
pova_list[name][item] = nil
|
pova_list[name][item] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
pova.do_override = function(player)
|
||||||
|
|
||||||
-- main counter that runs every second and totals override list
|
local name = player:get_player_name()
|
||||||
local timer = 0
|
|
||||||
minetest.register_globalstep(function(dtime)
|
|
||||||
|
|
||||||
timer = timer + dtime
|
if name and pova_list[name] then
|
||||||
|
|
||||||
-- every 1 second
|
-- check for new defaults
|
||||||
if timer < 1 then
|
local speed = pova_list[name]["default"].speed or 1
|
||||||
return
|
local jump = pova_list[name]["default"].jump or 1
|
||||||
end
|
local gravity = pova_list[name]["default"].gravity or 1
|
||||||
|
|
||||||
-- reset time for next check
|
for id, var in pairs(pova_list[name]) do
|
||||||
timer = 0
|
|
||||||
|
|
||||||
-- define locals outside loop
|
if var and id ~= "default" then
|
||||||
local name, speed, jump, gravity
|
|
||||||
|
|
||||||
-- loop through players
|
-- add any additional changes
|
||||||
for _,player in ipairs(minetest.get_connected_players()) do
|
speed = speed + (pova_list[name][id].speed or 0)
|
||||||
|
jump = jump + (pova_list[name][id].jump or 0)
|
||||||
name = player:get_player_name()
|
gravity = gravity + (pova_list[name][id].gravity or 0)
|
||||||
|
|
||||||
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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
print ("speed: " .. speed .. " / jump: " .. jump .. " / gravity: " .. gravity)
|
|
||||||
|
|
||||||
player:set_physics_override(speed, jump, gravity)
|
|
||||||
|
|
||||||
end
|
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)
|
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
|
-- 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
|
-- define changes that are added onto defaults
|
||||||
pova.add_override(name, "test", {
|
pova.add_override(name, "test", {
|
||||||
speed = 1, jump = 2, gravity = 0.5})
|
speed = 1, jump = 2, gravity = 0.5})
|
||||||
|
|
||||||
|
-- apply override
|
||||||
|
pova.do_override(user)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_place = function(itemstack, user, pointed_thing)
|
on_place = function(itemstack, user, pointed_thing)
|
||||||
@ -123,5 +137,8 @@ minetest.register_craftitem("pova:axe", {
|
|||||||
|
|
||||||
-- remove changes
|
-- remove changes
|
||||||
pova.del_override(name, "test")
|
pova.del_override(name, "test")
|
||||||
|
|
||||||
|
-- apply override
|
||||||
|
pova.do_override(user)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user