summaryrefslogtreecommitdiffstats
path: root/res/raw
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2009-10-29 14:27:29 -0700
committerJason Sams <rjsams@android.com>2009-10-29 14:27:29 -0700
commitc85147968fa0e1aee86aa88c01a325269b6f907b (patch)
treecf8b244c627f02649e9b331c2d58da6130697317 /res/raw
parent4d7b6c949ac02eb7b40b0040fafc78f97ea264f8 (diff)
downloadandroid_packages_apps_Trebuchet-c85147968fa0e1aee86aa88c01a325269b6f907b.tar.gz
android_packages_apps_Trebuchet-c85147968fa0e1aee86aa88c01a325269b6f907b.tar.bz2
android_packages_apps_Trebuchet-c85147968fa0e1aee86aa88c01a325269b6f907b.zip
Wrap text with the curve instead of the fade. Mipmap distant text and icons. Fix two physics bugs. Snapping at end of list was inconsistant between flings and moves. Fix phyiscs boundary condition during low speed movement back to center.
Diffstat (limited to 'res/raw')
-rw-r--r--res/raw/rollo3.c130
1 files changed, 59 insertions, 71 deletions
diff --git a/res/raw/rollo3.c b/res/raw/rollo3.c
index 1e7b5f018..cbcdb22ea 100644
--- a/res/raw/rollo3.c
+++ b/res/raw/rollo3.c
@@ -1,6 +1,6 @@
#pragma version(1)
#pragma stateVertex(PV)
-#pragma stateFragment(PFTexLinear)
+#pragma stateFragment(PFTexNearest)
#pragma stateStore(PSIcons)
#define PI 3.14159f
@@ -69,11 +69,11 @@ void setColor(float r, float g, float b, float a) {
void init() {
g_AttractionTable[0] = 20.0f;
g_AttractionTable[1] = 20.0f;
- g_AttractionTable[2] = 15.0f;
+ g_AttractionTable[2] = 20.0f;
g_AttractionTable[3] = 10.0f;
g_AttractionTable[4] = -10.0f;
- g_AttractionTable[5] = -15.0f;
- g_AttractionTable[6] = -15.0f;
+ g_AttractionTable[5] = -20.0f;
+ g_AttractionTable[6] = -20.0f;
g_AttractionTable[7] = -20.0f;
g_AttractionTable[8] = -20.0f; // dup 7 to avoid a clamp later
g_FrictionTable[0] = 10.0f;
@@ -108,8 +108,8 @@ void move() {
g_PosVelocity = 0;
g_PosPage += dx * 4;
- float pmin = -0.25f;
- float pmax = g_PosMax + 0.25f;
+ float pmin = -0.49f;
+ float pmax = g_PosMax + 0.49f;
g_PosPage = clampf(g_PosPage, pmin, pmax);
}
g_LastTouchDown = state->newTouchDown;
@@ -172,7 +172,6 @@ void updatePos() {
return;
}
- int outOfRange = 0;
float tablePosNorm = fracf(g_PosPage + 0.5f);
float tablePosF = tablePosNorm * g_PhysicsTableSize;
int tablePosI = tablePosF;
@@ -185,23 +184,8 @@ void updatePos() {
tablePosFrac) * 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);
- }
- */
-
- // New position is old posiition + (total distance) * (interpolated time)
- g_PosPage = g_MoveToOldPos + (state->targetPos - g_MoveToOldPos) * getInterpolation((g_MoveToTotalTime - g_MoveToTime) / g_MoveToTotalTime);
-
+ // New position is old posiition + (total distance) * (interpolated time)
+ g_PosPage = g_MoveToOldPos + (state->targetPos - g_MoveToOldPos) * getInterpolation((g_MoveToTotalTime - g_MoveToTime) / g_MoveToTotalTime);
g_MoveToTime -= g_DT;
if (g_MoveToTime <= 0) {
g_MoveToTime = 0;
@@ -210,23 +194,25 @@ void updatePos() {
return;
}
- if (g_PosPage < -0.5f) {
- accel = g_AttractionTable[0] * g_DT;
- outOfRange = 1;
- }
- if ((g_PosPage - g_PosMax) > 0.5f) {
- accel = g_AttractionTable[(int)g_PhysicsTableSize] * g_DT;
- outOfRange = 1;
- }
-
// If our velocity is low OR acceleration is opposing it, apply it.
- if (fabsf(g_PosVelocity) < 2.5f || (g_PosVelocity * accel) < 0 || outOfRange) {
+ if (fabsf(g_PosVelocity) < 4.0f || (g_PosVelocity * accel) < 0) {
g_PosVelocity += accel;
}
+ //debugF("g_PosPage", g_PosPage);
+ //debugF(" g_PosVelocity", g_PosVelocity);
+ //debugF(" friction", friction);
+ //debugF(" accel", accel);
+
+ // Normal physics
+ if (g_PosVelocity > 0) {
+ g_PosVelocity -= friction;
+ g_PosVelocity = maxf(g_PosVelocity, 0);
+ } else {
+ g_PosVelocity += friction;
+ g_PosVelocity = minf(g_PosVelocity, 0);
+ }
- if ((friction > fabsf(g_PosVelocity)) &&
- (friction > fabsf(accel)) &&
- !outOfRange) {
+ if ((friction > fabsf(g_PosVelocity)) && (friction > fabsf(accel))) {
// Special get back to center and overcome friction physics.
float t = tablePosNorm - 0.5f;
if (fabsf(t) < (friction * g_DT)) {
@@ -240,34 +226,25 @@ void updatePos() {
g_PosVelocity = friction;
}
}
- } else {
- // Normal physics
- if (g_PosVelocity > 0) {
- g_PosVelocity -= friction;
- g_PosVelocity = maxf(g_PosVelocity, 0);
- } else {
- g_PosVelocity += friction;
- g_PosVelocity = minf(g_PosVelocity, 0);
- }
}
- g_PosPage += g_PosVelocity * g_DT;
// Check for out of boundry conditions.
if (g_PosPage < 0 && g_PosVelocity < 0) {
- g_PosPage = maxf(g_PosPage, -0.49);
float damp = 1.0 + (g_PosPage * 4);
damp = clampf(damp, 0.f, 0.9f);
g_PosVelocity *= damp;
}
if (g_PosPage > g_PosMax && g_PosVelocity > 0) {
- g_PosPage = minf(g_PosPage, g_PosMax + 0.49);
float damp = 1.0 - ((g_PosPage - g_PosMax) * 4);
damp = clampf(damp, 0.f, 0.9f);
g_PosVelocity *= damp;
}
+
+ g_PosPage += g_PosVelocity * g_DT;
+ g_PosPage = clampf(g_PosPage, -0.49, g_PosMax + 0.49);
}
-int positionStrip(float row, float column, int isTop, float p)
+int positionStrip(float row, float column, int isTop, float p, int isText)
{
float mat1[16];
float x = 0.5f * (column - 1.5f);
@@ -287,9 +264,15 @@ int positionStrip(float row, float column, int isTop, float p)
float soff = -(row * 1.4);
if (isTop) {
matrixLoadScale(mat1, 1.f, -0.85f, 1.f);
+ if (isText) {
+ matrixScale(mat1, 1.f, 2.f, 1.f);
+ }
matrixTranslate(mat1, 0, soff - 0.97f, 0);
} else {
matrixLoadScale(mat1, 1.f, 0.85f, 1.f);
+ if (isText) {
+ matrixScale(mat1, 1.f, 2.f, 1.f);
+ }
matrixTranslate(mat1, 0, soff - 0.45f, 0);
}
vpLoadTextureMatrix(mat1);
@@ -300,11 +283,11 @@ void
draw_home_button()
{
setColor(1.0f, 1.0f, 1.0f, 1.0f);
- bindTexture(NAMED_PFTexLinear, 0, state->homeButtonId);
+ bindTexture(NAMED_PFTexNearest, 0, state->homeButtonId);
float x = (SCREEN_WIDTH_PX - params->homeButtonTextureWidth) / 2;
float y = (g_Zoom - 1.f) * params->homeButtonTextureHeight;
- y -= 36; // move the house to the edge of the screen as it doesn't fill the texture.
+ y -= 30; // move the house to the edge of the screen as it doesn't fill the texture.
drawSpriteScreenspace(x, y, 0, params->homeButtonTextureWidth, params->homeButtonTextureHeight);
}
@@ -339,13 +322,12 @@ void drawFrontGrid(float rowOffset, float p)
if ((y >= ymin) && (y <= ymax)) {
setColor(1.f, 1.f, 1.f, 1.f);
-
if (state->selectedIconIndex == iconNum && !p) {
- bindTexture(NAMED_PFTexLinear, 0, state->selectedIconTexture);
+ bindTexture(NAMED_PFTexNearest, 0, state->selectedIconTexture);
drawSpriteScreenspace(x, y, 0, 128, 128);
}
- bindTexture(NAMED_PFTexLinear, 0, loadI32(ALLOC_ICON_IDS, iconNum));
+ bindTexture(NAMED_PFTexNearest, 0, loadI32(ALLOC_ICON_IDS, iconNum));
if (!p) {
drawSpriteScreenspace(x, y, 0, 128, 128);
} else {
@@ -362,20 +344,13 @@ void drawFrontGrid(float rowOffset, float p)
}
float y2 = y - 44;
- float a = 1.f;
- if (y2 < ymin) {
- a = 1.f - (ymin - y2) * 0.02f;
- }
- if (y > (ymax + 40)) {
- a = 1.f - (y - (ymax + 40)) * 0.02f;
+ if ((y2 >= ymin) && (y2 <= ymax)) {
+ float a = maxf(0, 1.f - p * 5.f);
+ setColor(1.f, 1.f, 1.f, a);
+ bindTexture(NAMED_PFTexNearest, 0, loadI32(ALLOC_LABEL_IDS, iconNum));
+ drawSpriteScreenspace(x, y - 44, 0,
+ params->bubbleBitmapWidth, params->bubbleBitmapHeight);
}
- a = clampf(a, 0, 1);
- a *= maxf(0, 1.f - p * 5.f);
-
- setColor(1, 1, 1, a);
- bindTexture(NAMED_PFTexLinear, 0, loadI32(ALLOC_LABEL_IDS, iconNum));
- drawSpriteScreenspace(x, y - 44, 0,
- params->bubbleBitmapWidth, params->bubbleBitmapHeight);
}
iconNum++;
}
@@ -385,11 +360,22 @@ void drawFrontGrid(float rowOffset, float p)
void drawStrip(float row, float column, int isTop, int iconNum, float p)
{
if (iconNum < 0) return;
- int offset = positionStrip(row, column, isTop, p);
- bindTexture(NAMED_PFTexLinear, 0, loadI32(ALLOC_ICON_IDS, iconNum));
+ int offset = positionStrip(row, column, isTop, p, 0);
+ bindTexture(NAMED_PFTexMip, 0, loadI32(ALLOC_ICON_IDS, iconNum));
if (offset < -20) return;
offset = clamp(offset, 0, 199 - 20);
drawSimpleMeshRange(NAMED_SMMesh, offset * 6, 20 * 6);
+
+ if (isTop) {
+ offset = positionStrip(row - 0.72f, column, isTop, p, 1);
+ } else {
+ offset = positionStrip(row + 0.73f, column, isTop, p, 1);
+ }
+ if (offset < -20) return;
+ bindTexture(NAMED_PFTexMip, 0, loadI32(ALLOC_LABEL_IDS, iconNum));
+ offset = clamp(offset, 0, 199 - 20);
+ //drawSimpleMeshRange(NAMED_SMMesh, offset * 6, 20 * 6);
+ drawSimpleMesh(NAMED_SMMesh);
}
void drawTop(float rowOffset, float p)
@@ -495,7 +481,7 @@ main(int launchID)
//positionStrip(1, 0, 0);
//drawSimpleMesh(NAMED_SMMesh);
- bindProgramFragment(NAMED_PFTexLinear);
+ bindProgramFragment(NAMED_PFTexMip);
drawTop(g_PosPage, 1-g_Zoom);
@@ -507,6 +493,8 @@ main(int launchID)
vpLoadModelMatrix(mat1);
vpLoadTextureMatrix(mat1);
}
+
+ bindProgramFragment(NAMED_PFTexNearest);
drawFrontGrid(g_PosPage, 1-g_Zoom);
draw_home_button();