1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-28 14:53:58 +00:00

Prevent floating point issues accumulating

This commit is contained in:
Evil Eye 2021-10-19 21:38:07 +02:00
parent b1fdc0eb8a
commit dd4d8b2649

View File

@ -1,10 +1,20 @@
#include "magiceffects.hpp" #include "magiceffects.hpp"
#include <cmath>
#include <stdexcept> #include <stdexcept>
#include <components/esm/effectlist.hpp> #include <components/esm/effectlist.hpp>
#include <components/esm/magiceffects.hpp> #include <components/esm/magiceffects.hpp>
namespace
{
// Round value to prevent precision issues
void truncate(float& value)
{
value = std::roundf(value * 1000.f) / 1000.f;
}
}
namespace MWMechanics namespace MWMechanics
{ {
EffectKey::EffectKey() : mId (0), mArg (-1) {} EffectKey::EffectKey() : mId (0), mArg (-1) {}
@ -74,6 +84,7 @@ namespace MWMechanics
{ {
mModifier += param.mModifier; mModifier += param.mModifier;
mBase += param.mBase; mBase += param.mBase;
truncate(mModifier);
return *this; return *this;
} }
@ -81,6 +92,7 @@ namespace MWMechanics
{ {
mModifier -= param.mModifier; mModifier -= param.mModifier;
mBase -= param.mBase; mBase -= param.mBase;
truncate(mModifier);
return *this; return *this;
} }