00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef PS_MISC_H
00029 #define PS_MISC_H
00030
00031 #include "nel/misc/types_nl.h"
00032 #include "nel/misc/vector.h"
00033
00034 namespace NL3D {
00035
00041 inline uint ScaleFloatGE(float f, float deltaT, float clampValue, uint numStep)
00042 {
00043 if (f >= clampValue) return 0;
00044 float endValue = f + numStep * deltaT;
00045 if (endValue < clampValue) return numStep;
00046 const uint numAfterInitialDate = (uint) ((endValue - clampValue) / deltaT);
00047 return numStep - numAfterInitialDate;
00048 }
00049
00050
00061 inline NLMISC::CVector *FillBufUsingSubdiv(const NLMISC::CVector &value,
00062 float clampValue,
00063 float &startValue,
00064 float deltaT,
00065 uint &maxNumStep,
00066 NLMISC::CVector *destPos,
00067 uint32 stride
00068 )
00069 {
00070 uint numToFill = ScaleFloatGE(startValue, deltaT, clampValue, maxNumStep);
00071 nlassert(numToFill <= maxNumStep);
00072 startValue += numToFill * deltaT;
00073 maxNumStep -= numToFill;
00074 while (numToFill--)
00075 {
00076 *destPos = value;
00077 destPos = (NLMISC::CVector *) ( (uint8 *) destPos + stride);
00078 }
00079
00080 return destPos;
00081 }
00082
00083 }
00084
00085 #endif