mirror of
https://github.com/minetest-mods/player_monoids.git
synced 2025-07-03 00:20:37 +02:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
89e25a72ae | |||
668bce3772 | |||
481ef9e2cd | |||
cdb597629f | |||
ef6f07b6fa |
9
.luacheckrc
Normal file
9
.luacheckrc
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
read_globals = {
|
||||
"minetest",
|
||||
"vector",
|
||||
}
|
||||
|
||||
globals = {
|
||||
"player_monoids",
|
||||
}
|
@ -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.
|
||||
newmod.speed_boosts = player_monoids.make_monoid({
|
||||
combine = function(speed1, speed2)
|
||||
return speed1 * speed2
|
||||
return math.max(speed1, speed2)
|
||||
end,
|
||||
fold = function(tab)
|
||||
local res = 1
|
||||
for _, speed in pairs(tab) do
|
||||
res = res * speed
|
||||
res = math.max(res, speed)
|
||||
end
|
||||
end,
|
||||
identity = 1,
|
||||
|
8
init.lua
8
init.lua
@ -59,13 +59,13 @@ local function monoid(def)
|
||||
return mon
|
||||
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 def = self.def
|
||||
|
||||
|
||||
local p_effects = self.player_map[p_name]
|
||||
if p_effects == nil then
|
||||
p_effects = {}
|
||||
@ -116,3 +116,5 @@ end
|
||||
|
||||
dofile(modpath .. "standard_monoids.lua")
|
||||
dofile(modpath .. "test.lua")
|
||||
|
||||
minetest.log("action", "[player_monoids] loaded.")
|
||||
|
@ -5,7 +5,7 @@ local function mult(x, y) return x * y end
|
||||
local function mult_fold(elems)
|
||||
local tot = 1
|
||||
|
||||
for k,v in pairs(elems) do
|
||||
for _, v in pairs(elems) do
|
||||
tot = tot * v
|
||||
end
|
||||
|
||||
@ -26,7 +26,7 @@ local function v_mult_fold(identity)
|
||||
return function(elems)
|
||||
local tot = identity
|
||||
|
||||
for k, v in pairs(elems) do
|
||||
for _, v in pairs(elems) do
|
||||
tot = v_mult(tot, v)
|
||||
end
|
||||
|
||||
@ -34,24 +34,17 @@ local function v_mult_fold(identity)
|
||||
end
|
||||
end
|
||||
|
||||
local monoid = player_monoids.monoid
|
||||
local monoid = player_monoids.make_monoid
|
||||
|
||||
-- Speed monoid. Effect values are speed multipliers. Must be nonnegative
|
||||
-- numbers.
|
||||
player_monoids.speed = monoid({
|
||||
combine = function(x, y) return x * y end,
|
||||
fold = function(elems)
|
||||
local res = 1
|
||||
for k, v in pairs(elems) do
|
||||
res = res * v
|
||||
end
|
||||
|
||||
return res
|
||||
end,
|
||||
combine = mult,
|
||||
fold = mult_fold,
|
||||
identity = 1,
|
||||
apply = function(mult, player)
|
||||
apply = function(multiplier, player)
|
||||
local ov = player:get_physics_override()
|
||||
ov.speed = mult
|
||||
ov.speed = multiplier
|
||||
player:set_physics_override(ov)
|
||||
end,
|
||||
})
|
||||
@ -60,19 +53,12 @@ player_monoids.speed = monoid({
|
||||
-- Jump monoid. Effect values are jump multipliers. Must be nonnegative
|
||||
-- numbers.
|
||||
player_monoids.jump = monoid({
|
||||
combine = function(x, y) return x * y end,
|
||||
fold = function(elems)
|
||||
local res = 1
|
||||
for k, v in pairs(elems) do
|
||||
res = res * v
|
||||
end
|
||||
|
||||
return res
|
||||
end,
|
||||
combine = mult,
|
||||
fold = mult_fold,
|
||||
identity = 1,
|
||||
apply = function(mult, player)
|
||||
apply = function(multiplier, player)
|
||||
local ov = player:get_physics_override()
|
||||
ov.jump = mult
|
||||
ov.jump = multiplier
|
||||
player:set_physics_override(ov)
|
||||
end,
|
||||
})
|
||||
@ -80,19 +66,12 @@ player_monoids.jump = monoid({
|
||||
|
||||
-- Gravity monoid. Effect values are gravity multipliers.
|
||||
player_monoids.gravity = monoid({
|
||||
combine = function(x, y) return x * y end,
|
||||
fold = function(elems)
|
||||
local res = 1
|
||||
for k, v in pairs(elems) do
|
||||
res = res * v
|
||||
end
|
||||
|
||||
return res
|
||||
end,
|
||||
combine = mult,
|
||||
fold = mult_fold,
|
||||
identity = 1,
|
||||
apply = function(mult, player)
|
||||
apply = function(multiplier, player)
|
||||
local ov = player:get_physics_override()
|
||||
ov.gravity = mult
|
||||
ov.gravity = multiplier
|
||||
player:set_physics_override(ov)
|
||||
end,
|
||||
})
|
||||
@ -103,7 +82,7 @@ player_monoids.gravity = monoid({
|
||||
player_monoids.fly = monoid({
|
||||
combine = function(p, q) return p or q end,
|
||||
fold = function(elems)
|
||||
for k, v in pairs(elems) do
|
||||
for _, v in pairs(elems) do
|
||||
if v then return true end
|
||||
end
|
||||
|
||||
@ -130,7 +109,7 @@ player_monoids.fly = monoid({
|
||||
player_monoids.noclip = monoid({
|
||||
combine = function(p, q) return p or q end,
|
||||
fold = function(elems)
|
||||
for k, v in pairs(elems) do
|
||||
for _, v in pairs(elems) do
|
||||
if v then return true end
|
||||
end
|
||||
|
||||
|
2
test.lua
2
test.lua
@ -11,7 +11,7 @@ local function test(player)
|
||||
local p_name = player:get_player_name()
|
||||
|
||||
minetest.chat_send_player(p_name, "Your speed is: " .. speed:value(player))
|
||||
|
||||
|
||||
minetest.after(3, function()
|
||||
speed:del_change(player, ch_id)
|
||||
minetest.chat_send_player(p_name, "Your speed is: " .. speed:value(player))
|
||||
|
Reference in New Issue
Block a user