From 98459a429457e34a7cca3b424c814e8a32e803d9 Mon Sep 17 00:00:00 2001 From: TenPlus1 Date: Wed, 25 Apr 2018 09:39:05 +0100 Subject: [PATCH] add new named overrides for special features (default, min, max, force) --- README.md | 15 ++++++++---- init.lua | 72 ++++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 67 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index ac2b6df..7cb259e 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,15 @@ Pova gives mod makers a set of easy to use functions that safely apply overrides ## Functions -pova.set_override_defaults = function(name, def) - -- Sets default speed, jump and gravity for a player that additional overrides are then added onto. - pova.add_override = function(name, item, def) - Adds a named override which can be used to add or subtract from speed, jump and gravity effects. +- custom overrides are also used for specific tasks: + +-- "default" sets default values for speed, jump and gravity. +-- "min" provides a minimum level for each of the settings. +-- "max" provides a maximum level for each of the settings. +-- "force" overrides all and forces a value for each setting (for sleeping in bed) pova.get_override = function(name, item) @@ -39,3 +41,8 @@ pova.do_override(player) - Added pova.do_override(player) to instantly set overrides on list. - Added 'pova_loop' setting in minetest.conf to disable override calc loop + +###0.3 + + - Added custom override names for special functions "default", "min", "max", "force" + - Tweaked test axe to use new settings. diff --git a/init.lua b/init.lua index a6c667f..f1cff7b 100644 --- a/init.lua +++ b/init.lua @@ -12,14 +12,16 @@ 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}} + default = {speed = 1, jump = 1, gravity = 1}, + min = {speed = 0, jump = 0, gravity = 0}} 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}} + default = {speed = 1, jump = 1, gravity = 1}, + min = {speed = 0, jump = 0, gravity = 0}} pova.do_override(player) end) @@ -29,23 +31,15 @@ minetest.register_on_leaveplayer(function(player) end) --- global command functions -pova.set_override_defaults = function(name, def) - pova_list[name]["default"] = def -end - pova.add_override = function(name, item, def) - if item == "default" then return end pova_list[name][item] = def end pova.get_override = function(name, item) - if item == "default" then return end return pova_list[name][item] end pova.del_override = function(name, item) - if item == "default" then return end pova_list[name][item] = nil end @@ -60,9 +54,15 @@ pova.do_override = function(player) local jump = pova_list[name]["default"].jump or 1 local gravity = pova_list[name]["default"].gravity or 1 + -- loop through list of added overrides for id, var in pairs(pova_list[name]) do - if var and id ~= "default" then + -- skip any custom sets + if var + and id ~= "default" + and id ~= "min" + and id ~= "max" + and id ~= "force" then -- add any additional changes speed = speed + (pova_list[name][id].speed or 0) @@ -71,11 +71,33 @@ pova.do_override = function(player) end end + -- minimum checks + if pova_list[name]["min"] then + speed = math.max(pova_list[name]["min"].speed or speed, speed) + jump = math.max(pova_list[name]["min"].jump or jump, jump) + gravity = math.max(pova_list[name]["min"].gravity or gravity, gravity) + end + + -- maximum checks + if pova_list[name]["max"] then + speed = math.min(pova_list[name]["max"].speed or speed, speed) + jump = math.min(pova_list[name]["max"].jump or jump, jump) + gravity = math.min(pova_list[name]["max"].gravity or gravity, gravity) + end + + -- force values (for things like sleeping in bed) + if pova_list[name]["force"] then + speed = pova_list[name]["force"].speed or speed + jump = pova_list[name]["force"].jump or jump + gravity = pova_list[name]["force"].gravity or gravity + end + -- for testing only if name == "singleplayer" then print ("speed: " .. speed .. " / jump: " .. jump .. " / gravity: " .. gravity) end + -- set new overrides player:set_physics_override(speed, jump, gravity) end end @@ -116,13 +138,25 @@ minetest.register_craftitem("pova:axe", { local name = user:get_player_name() -- set new defaults - pova.set_override_defaults(name, { + pova.add_override(name, "default", { speed = 2, jump = 3, gravity = 1.0}) -- define changes that are added onto defaults pova.add_override(name, "test", { speed = 1, jump = -1, gravity = 0.5}) + -- set new minimum for jump + pova.add_override(name, "min", { + jump = 3}) + + -- add new maximum for speed + pova.add_override(name, "max", { + speed = 2}) + + -- add force value for gravity + pova.add_override(name, "force", { + gravity = 1.2}) + -- apply override pova.do_override(user) end, @@ -131,13 +165,19 @@ minetest.register_craftitem("pova:axe", { local name = user:get_player_name() - -- reset defaults - pova.set_override_defaults(name, { - speed = 1, jump = 1, gravity = 1}) - -- remove changes + pova.del_override(name, "max") + pova.del_override(name, "force") pova.del_override(name, "test") + -- reset min for jump + pova.add_override(name, "min", { + jump = 0}) + + -- reset defaults + pova.add_override(name, "default", { + speed = 1, jump = 1, gravity = 1}) + -- apply override pova.do_override(user) end,