diff options
author | Jason Sams <rjsams@android.com> | 2009-10-19 14:45:45 -0700 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2009-10-19 14:45:45 -0700 |
commit | c1c521edf4fbb7048a4fba601d13a765e073e402 (patch) | |
tree | aab2f51cbe19aea2e7e12cd255378340188c78ab /res/raw | |
parent | 37e7c2b6e4ee280b9cad39e53d9206ca7a46c510 (diff) | |
download | android_packages_apps_Trebuchet-c1c521edf4fbb7048a4fba601d13a765e073e402.tar.gz android_packages_apps_Trebuchet-c1c521edf4fbb7048a4fba601d13a765e073e402.tar.bz2 android_packages_apps_Trebuchet-c1c521edf4fbb7048a4fba601d13a765e073e402.zip |
Add support for MoveTo.
Diffstat (limited to 'res/raw')
-rw-r--r-- | res/raw/rollo3.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/res/raw/rollo3.c b/res/raw/rollo3.c index bb0237376..253709a44 100644 --- a/res/raw/rollo3.c +++ b/res/raw/rollo3.c @@ -22,6 +22,10 @@ float g_Zoom; float g_OldPosPage; float g_OldPosVelocity; float g_OldZoom; +float g_MoveToTotalTime; +float g_MoveToTime; +float g_MoveToOldPos; + // Drawing constants, should be parameters ====== #define VIEW_ANGLE 1.28700222f @@ -79,6 +83,9 @@ void init() { g_LastPositionX = 0; g_Zoom = 0; g_SpecialHWWar = 1; + g_MoveToTime = 0; + g_MoveToOldPos = 0; + g_MoveToTotalTime = 0.5f; } void resetHWWar() { @@ -97,9 +104,16 @@ void move() { } g_LastTouchDown = state->newTouchDown; g_LastPositionX = state->newPositionX; + g_MoveToTime = 0; //debugF("Move P", g_PosPage); } +void moveTo() { + g_MoveToTime = g_MoveToTotalTime; + g_PosVelocity = 0; + g_MoveToOldPos = g_PosPage; +} + void fling() { g_LastTouchDown = 0; g_PosVelocity = -state->flingVelocity * 4; @@ -145,6 +159,25 @@ void updatePos() { tablePosFrac) * g_DT; float friction = 4.f * g_DT; + if (g_MoveToTime) { + float a = 2.f * (state->targetPos - g_MoveToOldPos) / + (g_MoveToTotalTime * g_MoveToTotalTime); + if (g_MoveToTime > (g_MoveToTotalTime * 0.5f)) { + // slowing + g_PosPage = state->targetPos - 0.5f * a * (g_MoveToTime * g_MoveToTime); + } else { + // accelerating. + float t = g_MoveToTotalTime - g_MoveToTime; + g_PosPage = g_MoveToOldPos + 0.5f * a * (t * t); + } + g_MoveToTime -= g_DT; + if (g_MoveToTime <= 0) { + g_MoveToTime = 0; + g_PosPage = state->targetPos; + } + return; + } + if (g_PosPage < -0.5f) { accel = g_AttractionTable[0] * g_DT; outOfRange = 1; |