const float grow_time = 0.5f; /* sec for the ball to get to size. */
static float grow_t = 0.0; /* timer for the ball to grow... */
static float grow_strt = 0; /* starting value for growth */
+const float grow_big = 1.5f; /* large factor */
+const float grow_small= 0.5f; /* small factor */
static void grow_set(const struct s_file *fp, int size)
{
static int got_orig = 0;
- if (!got_orig)
+ if (!got_orig)
{
grow_orig = fp->uv->r;
grow_goal = grow_orig;
if (size == 50)
{
- if (grow_goal == grow_orig * 0.5f) return; /*already small!*/
- else if (grow_goal == grow_orig * 1.5f) /* big, let's set it to normal.*/
+ if (grow_goal == grow_orig * grow_small) return; /*already small!*/
+ else if (grow_goal == grow_orig * grow_big) /* big, let's set it to normal.*/
{
grow = 1;
grow_goal = grow_orig;
}
else /*must be normal sized.*/
{
- grow_goal = grow_orig * 0.5f;
+ grow_goal = grow_orig * grow_small;
grow = 1;
- }
+ }
}/* done with 50% size coin */
if (size == 150)
{
- if (grow_goal == grow_orig * 1.5f) return; /*already big!*/
- else if (grow_goal == grow_orig * 0.5f) /* small, let's set it to normal.*/
+ if (grow_goal == grow_orig * grow_big) return; /*already big!*/
+ else if (grow_goal == grow_orig * grow_small) /* small, let's set it to normal.*/
{
grow = 1;
grow_goal = grow_orig;
}
else /*must be normal sized.*/
{
- grow_goal = grow_orig * 1.5f;
+ grow_goal = grow_orig * grow_big;
grow = 1;
}
}/* done with 150% size coin */
{
grow_t = 0.0;
grow_strt = fp->uv->r;
- }
+ }
}
static void grow_ball(const struct s_file *fp, float dt)
-{
+{
float dr;
-
+
/*calculate new size based on how long since you touched the coin...*/
grow_t += dt;
if (grow_t >= grow_time)
{
grow = 0;
grow_t = grow_time;
- }
+ }
- dr = grow_strt + ((grow_goal-grow_strt) * (1.0f / (grow_time / grow_t)));
+ dr = grow_strt + ((grow_goal-grow_strt) * (1.0f / (grow_time / grow_t)));
fp->uv->p[1] += (dr - fp->uv->r); /*No sinking through the floor! keeps ball's bottom constant.*/
fp->uv->r = dr;
static void game_draw_coins(const struct s_file *fp)
{
float r = 360.f * SDL_GetTicks() / 1000.f;
- int ci;
+ int ci;
coin_push();
coin_push_text(0); /*regular coins*/
{
for (ci = 0; ci < fp->cc; ci++)
-
+
if (fp->cv[ci].n > 0 && fp->cv[ci].n < 50)
{
glPushMatrix();
coin_push_text(50); /*any shrink coins?*/
{
for (ci = 0; ci < fp->cc; ci++)
-
+
if (fp->cv[ci].n == 50)
{
glPushMatrix();
coin_push_text(150); /*any grow coins?*/
{
for (ci = 0; ci < fp->cc; ci++)
-
+
if (fp->cv[ci].n == 150)
{
glPushMatrix();
part_burst(p, c);
/*add coins if regular, change radius if not.*/
- if (n <= 10)
+ if (n <= 10)
coins += n;
else
- {
+ {
grow_set(fp, n); /*only 50 and 150 will produce results.*/
n = 0;
- }
+ }
/* Check for goal open. */
if (goal_c > 0)
{
*state_value = g->s;
audio_play(AUD_GOAL, 1.0f);
+ grow_goal = grow_orig;
return g->c ? GAME_SPEC : GAME_GOAL;
}
part_burst(p, c+1);
part_burst(p, c+2);
drawball = 0;
+ grow_goal = grow_orig;
audio_play(AUD_TIME, 1.0f);
return GAME_TIME;
}
if (bt && fp->uv[0].p[1] < fp->vv[0].p[1])
{
audio_play(AUD_FALL, 1.0f);
+ grow_goal = grow_orig;
return GAME_FALL;
}
game_rz = game_iz;
}
- /*might need to put the call to grow_ball here.*/
-
if (grow) grow_ball(fp,dt);
game_update_grav(h, g);