5 Commits

5 changed files with 34 additions and 44 deletions

9
.luacheckrc Normal file
View File

@ -0,0 +1,9 @@
read_globals = {
"minetest",
"vector",
}
globals = {
"player_monoids",
}

View File

@ -104,12 +104,12 @@ the strongest boost. Most of it could be done the same way:
-- My speed boosts monoid takes speed multipliers (numbers) that are at least 1. -- My speed boosts monoid takes speed multipliers (numbers) that are at least 1.
newmod.speed_boosts = player_monoids.make_monoid({ newmod.speed_boosts = player_monoids.make_monoid({
combine = function(speed1, speed2) combine = function(speed1, speed2)
return speed1 * speed2 return math.max(speed1, speed2)
end, end,
fold = function(tab) fold = function(tab)
local res = 1 local res = 1
for _, speed in pairs(tab) do for _, speed in pairs(tab) do
res = res * speed res = math.max(res, speed)
end end
end, end,
identity = 1, identity = 1,

View File

@ -59,9 +59,9 @@ local function monoid(def)
return mon return mon
end end
player_monoids.monoid = monoid player_monoids.make_monoid = monoid
function mon_meta:add_change(player, value) function mon_meta:add_change(player, value, id)
local p_name = player:get_player_name() local p_name = player:get_player_name()
local def = self.def local def = self.def
@ -116,3 +116,5 @@ end
dofile(modpath .. "standard_monoids.lua") dofile(modpath .. "standard_monoids.lua")
dofile(modpath .. "test.lua") dofile(modpath .. "test.lua")
minetest.log("action", "[player_monoids] loaded.")

View File

@ -5,7 +5,7 @@ local function mult(x, y) return x * y end
local function mult_fold(elems) local function mult_fold(elems)
local tot = 1 local tot = 1
for k,v in pairs(elems) do for _, v in pairs(elems) do
tot = tot * v tot = tot * v
end end
@ -26,7 +26,7 @@ local function v_mult_fold(identity)
return function(elems) return function(elems)
local tot = identity local tot = identity
for k, v in pairs(elems) do for _, v in pairs(elems) do
tot = v_mult(tot, v) tot = v_mult(tot, v)
end end
@ -34,24 +34,17 @@ local function v_mult_fold(identity)
end end
end end
local monoid = player_monoids.monoid local monoid = player_monoids.make_monoid
-- Speed monoid. Effect values are speed multipliers. Must be nonnegative -- Speed monoid. Effect values are speed multipliers. Must be nonnegative
-- numbers. -- numbers.
player_monoids.speed = monoid({ player_monoids.speed = monoid({
combine = function(x, y) return x * y end, combine = mult,
fold = function(elems) fold = mult_fold,
local res = 1
for k, v in pairs(elems) do
res = res * v
end
return res
end,
identity = 1, identity = 1,
apply = function(mult, player) apply = function(multiplier, player)
local ov = player:get_physics_override() local ov = player:get_physics_override()
ov.speed = mult ov.speed = multiplier
player:set_physics_override(ov) player:set_physics_override(ov)
end, end,
}) })
@ -60,19 +53,12 @@ player_monoids.speed = monoid({
-- Jump monoid. Effect values are jump multipliers. Must be nonnegative -- Jump monoid. Effect values are jump multipliers. Must be nonnegative
-- numbers. -- numbers.
player_monoids.jump = monoid({ player_monoids.jump = monoid({
combine = function(x, y) return x * y end, combine = mult,
fold = function(elems) fold = mult_fold,
local res = 1
for k, v in pairs(elems) do
res = res * v
end
return res
end,
identity = 1, identity = 1,
apply = function(mult, player) apply = function(multiplier, player)
local ov = player:get_physics_override() local ov = player:get_physics_override()
ov.jump = mult ov.jump = multiplier
player:set_physics_override(ov) player:set_physics_override(ov)
end, end,
}) })
@ -80,19 +66,12 @@ player_monoids.jump = monoid({
-- Gravity monoid. Effect values are gravity multipliers. -- Gravity monoid. Effect values are gravity multipliers.
player_monoids.gravity = monoid({ player_monoids.gravity = monoid({
combine = function(x, y) return x * y end, combine = mult,
fold = function(elems) fold = mult_fold,
local res = 1
for k, v in pairs(elems) do
res = res * v
end
return res
end,
identity = 1, identity = 1,
apply = function(mult, player) apply = function(multiplier, player)
local ov = player:get_physics_override() local ov = player:get_physics_override()
ov.gravity = mult ov.gravity = multiplier
player:set_physics_override(ov) player:set_physics_override(ov)
end, end,
}) })
@ -103,7 +82,7 @@ player_monoids.gravity = monoid({
player_monoids.fly = monoid({ player_monoids.fly = monoid({
combine = function(p, q) return p or q end, combine = function(p, q) return p or q end,
fold = function(elems) fold = function(elems)
for k, v in pairs(elems) do for _, v in pairs(elems) do
if v then return true end if v then return true end
end end
@ -130,7 +109,7 @@ player_monoids.fly = monoid({
player_monoids.noclip = monoid({ player_monoids.noclip = monoid({
combine = function(p, q) return p or q end, combine = function(p, q) return p or q end,
fold = function(elems) fold = function(elems)
for k, v in pairs(elems) do for _, v in pairs(elems) do
if v then return true end if v then return true end
end end