round utility functions

add mRoundF to return nearest floating value to stepsize
This commit is contained in:
AzaezelX 2024-04-10 14:17:19 -05:00
parent f0e7a27c16
commit f7ed077d82
4 changed files with 27 additions and 24 deletions

View file

@ -1895,18 +1895,8 @@ Point3F Gizmo::_snapPoint( const Point3F &pnt ) const
}
F32 Gizmo::_snapFloat( const F32 &val, const F32 &snap ) const
{
if ( snap == 0.0f )
return val;
F32 a = mFmod( val, snap );
F32 temp = val;
if ( mFabs(a) > (snap / 2) )
val < 0.0f ? temp -= snap : temp += snap;
return(temp - a);
{
return mRoundF(val, snap);
}
GizmoAlignment Gizmo::_filteredAlignment()

View file

@ -320,17 +320,7 @@ void WorldEditorSelection::offset( const Point3F& offset, F32 gridSnap )
F32 WorldEditorSelection::_snapFloat(const F32 &val, const F32 &snap) const
{
if (snap == 0.0f)
return val;
F32 a = mFmod(val, snap);
F32 temp = val;
if (mFabs(a) > (snap / 2))
val < 0.0f ? temp -= snap : temp += snap;
return(temp - a);
return mRoundF(val, snap);
}

View file

@ -103,6 +103,14 @@ DefineEngineFunction( mRound, S32, ( F32 v ),,
"@ingroup Math" )
{
return mRound(v);
DefineEngineFunction(mRoundF, F32, (F32 v, F32 step), ,
"Round v to the nth decimal place or the nearest whole number by default."
"@param v Value to roundn"
"@return The rounded value as a F32."
"@ingroup Math")
{
return mRoundF(v, step);
}
DefineEngineFunction(mRoundDelta, S32, (F32 v, S32 d), (0.0, 1),

View file

@ -217,7 +217,22 @@ inline F32 mRound(const F32 val, const S32 n)
S32 place = (S32) pow(10.0f, n);
return mFloor((val*place)+0.5)/place;
}
}
inline F32 mRoundF(const F32 val, const F32 step)
{
if (step == 0.0f)
return val;
F32 a = mFmod(val, step);
F32 temp = val;
if (mFabs(a) > (step / 2))
val < 0.0f ? temp -= step : temp += step;
return(temp - a);
}
inline S32 mAbs(const S32 val)
{