From c1c521edf4fbb7048a4fba601d13a765e073e402 Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Mon, 19 Oct 2009 14:45:45 -0700 Subject: Add support for MoveTo. --- res/raw/rollo3.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'res/raw') 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; -- cgit v1.2.3