Fixed modifier application and removal
parent
3a007e3bb1
commit
7f5ce4e033
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue