add TWEEN_SMOOTH

This commit is contained in:
Glenn Maynard
2005-08-12 04:08:51 +00:00
parent f54745f8da
commit b5cca118e0
2 changed files with 24 additions and 0 deletions
+23
View File
@@ -587,6 +587,27 @@ void Actor::UpdateTweening( float fDeltaTime )
case TWEEN_LINEAR: fPercentAlongPath = fPercentThroughTween; break;
case TWEEN_ACCELERATE: fPercentAlongPath = fPercentThroughTween * fPercentThroughTween; break;
case TWEEN_DECELERATE: fPercentAlongPath = 1 - (1-fPercentThroughTween) * (1-fPercentThroughTween); break;
case TWEEN_SMOOTH:
{
/* Sccelerate, reaching full speed at fShift, then decelerate the rest of
* the way. fShift = 1 degrades to TWEEN_ACCELERATE. fShift = 0 degrades
* to TWEEN_DECELERATE. (This is a rough approximation of a sigmoid.) */
const float fShift = 0.5f;
if( fPercentThroughTween < fShift )
{
fPercentAlongPath = SCALE( fPercentThroughTween, 0.0f, fShift, 0.0f, 1.0f );
fPercentAlongPath = fPercentThroughTween * fPercentThroughTween;
fPercentAlongPath = SCALE( fPercentAlongPath, 0.0f, 1.0f, 0.0f, fShift );
}
else
{
fPercentAlongPath = SCALE( fPercentThroughTween, fShift, 1.0f, 0.0f, 1.0f );
fPercentAlongPath = 1 - (1-fPercentAlongPath) * (1-fPercentAlongPath);
fPercentAlongPath = SCALE( fPercentAlongPath, 0.0f, 1.0f, fShift, 1.0f );
}
break;
}
case TWEEN_BOUNCE_BEGIN:fPercentAlongPath = 1 - RageFastSin( 1.1f + fPercentThroughTween*(PI-1.1f) ) / 0.89f; break;
case TWEEN_BOUNCE_END: fPercentAlongPath = RageFastSin( 1.1f + (1-fPercentThroughTween)*(PI-1.1f) ) / 0.89f; break;
case TWEEN_SPRING: fPercentAlongPath = 1 - RageFastCos( fPercentThroughTween*PI*2.5f )/(1+fPercentThroughTween*3); break;
@@ -1247,6 +1268,7 @@ public:
static int linear( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_LINEAR); return 0; }
static int accelerate( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_ACCELERATE); return 0; }
static int decelerate( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_DECELERATE); return 0; }
static int smooth( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_SMOOTH); return 0; }
static int bouncebegin( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_BOUNCE_BEGIN); return 0; }
static int bounceend( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_BOUNCE_END); return 0; }
static int spring( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_SPRING); return 0; }
@@ -1373,6 +1395,7 @@ public:
ADD_METHOD( linear )
ADD_METHOD( accelerate )
ADD_METHOD( decelerate )
ADD_METHOD( smooth )
ADD_METHOD( bouncebegin )
ADD_METHOD( bounceend )
ADD_METHOD( spring )