Fixed modifier application and removal

This commit is contained in:
the-real-herowl 2023-12-10 00:15:09 +01:00 committed by the-real-herowl
parent 3a007e3bb1
commit 7f5ce4e033

View file

@ -123,8 +123,21 @@ function mcl_fovapi.apply_modifier(player, modifier_name)
player:set_fov(modifier.fov_factor, modifier.is_multiplier, modifier.time) player:set_fov(modifier.fov_factor, modifier.is_multiplier, modifier.time)
else else
-- not exclusive? let's apply it in the mix. -- not exclusive? let's apply it in the mix.
-- assume is_multiplier is true. local fov_factor, is_mult = player:get_fov()
player:set_fov(modifier.fov_factor, true, modifier.time) if fov_factor == 0 then
fov_factor = 1
is_mult = true
end
if modifier.is_multiplier or is_mult then
fov_factor = fov_factor * modifier.fov_factor
else
fov_factor = (fov_factor + modifier.fov_factor) / 2
end
if modifier.is_multiplier and is_mult then
player:set_fov(fov_factor, true, modifier.time)
else
player:set_fov(fov_factor, false, modififer.time)
end
end end
end end
@ -153,12 +166,13 @@ function mcl_fovapi.remove_modifier(player, modifier_name)
applied[k] = mcl_fovapi.registered_modifiers[k] applied[k] = mcl_fovapi.registered_modifiers[k]
end end
if #applied == 0 then local elem = next
if elem(applied) == nil then
player:set_fov(0, false, modifier.time) player:set_fov(0, false, modifier.time)
return return
end end
local exc = false local exc = false
for k in applied do for k, _ in pairs(applied) do
if applied[k].exclusive == true then if applied[k].exclusive == true then
exc = applied[k] exc = applied[k]
break break
@ -171,10 +185,20 @@ function mcl_fovapi.remove_modifier(player, modifier_name)
else else
-- handle normal fov modifiers. -- handle normal fov modifiers.
local fov_factor = 1 local fov_factor = 1
for x in applied do local non_multiplier_added = false
fov_factor = fov_factor * x.fov_factor for _, x in pairs(applied) do
if not x.is_multiplier then
if non_multiplier_added then
fov_factor = (fov_factor + x.fov_factor) / 2
else
non_multiplier_added = true
fov_factor = fov_factor * x.fov_factor
end
else
fov_factor = fov_factor * x.fov_factor
end
end end
player:set_fov(fov_factor, true, modifier.time) player:set_fov(fov_factor, not non_multiplier_added, modifier.time)
end end
if mcl_fovapi.registered_modifiers[modifier_name].on_end ~= nil then if mcl_fovapi.registered_modifiers[modifier_name].on_end ~= nil then