static int grow = 0; /* Should the ball be changing size? */
static float grow_orig = 0; /* the original ball size */
static float grow_goal = 0; /* how big or small to get! */
-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 */
+static int got_orig = 0; /* Do we know original ball size? */
-
+#define GROW_TIME 0.5f /* sec for the ball to get to size. */
+#define GROW_BIG 1.5f /* large factor */
+#define 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;
+ else if (grow_goal == grow_orig * GROW_BIG)
{
grow = 1;
grow_goal = grow_orig;
}
- else /*must be normal sized.*/
+ else
{
- 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;
+ else if (grow_goal == grow_orig * GROW_SMALL)
{
grow = 1;
grow_goal = grow_orig;
}
- else /*must be normal sized.*/
+ else
{
- grow_goal = grow_orig * 1.5f;
+ grow_goal = grow_orig * GROW_BIG;
grow = 1;
}
- }/* done with 150% size coin */
+ }
if (grow)
{
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...*/
+
+ /* Calculate new size based on how long since you touched the coin... */
+
grow_t += dt;
- if (grow_t >= grow_time)
+
+ if (grow_t >= GROW_TIME)
{
grow = 0;
- grow_t = grow_time;
- }
+ 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.*/
+ /* No sinking through the floor! Keeps ball's bottom constant. */
+ fp->uv->p[1] += (dr - fp->uv->r);
fp->uv->r = dr;
}
static void view_init(void)
{
- /* Get the initial orientation angle */
- if (file.uc > 0)
- view_a = file.uv->a - 90.f; /* angle is in the sol */
- else
- view_a = 0.f; /* default is north :) */
-
+ view_a = 0.f;
view_ry = 0.f;
view_fov = (float) config_get_d(CONFIG_VIEW_FOV);
sol_load_gl(&back, config_data(level->back),
config_get_d(CONFIG_TEXTURES), 0);
+ /* Initialize ball size tracking... */
+
+ got_orig = 0;
+
return game_state;
}
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*/
+ 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_pull();
- /*there has got to be a better way than three seperate loops,*/
- /*once for each texture, but someone else is going to have to do it!*/
+ /* FIXME: there has got to be a better way than three seperate loops, once
+ * for each texture, but someone else is going to have to do it! */
+
coin_push();
- coin_push_text(50); /*any shrink coins?*/
+ coin_push_text(50); /* Any shrink coins? */
{
for (ci = 0; ci < fp->cc; ci++)
-
+
if (fp->cv[ci].n == 50)
{
glPushMatrix();
coin_pull();
coin_push();
- coin_push_text(150); /*any grow coins?*/
+ coin_push_text(150); /* Any grow coins? */
{
for (ci = 0; ci < fp->cc; ci++)
-
+
if (fp->cv[ci].n == 150)
{
glPushMatrix();
coin_color(c, n);
part_burst(p, c);
- /*add coins if regular, change radius if not.*/
- if (n <= 10)
+ /* Add coins if regular, change radius if not. */
+
+ if (n <= 10)
coins += n;
else
- {
- grow_set(fp, n); /*only 50 and 150 will produce results.*/
+ {
+ grow_set(fp, n);
n = 0;
- }
+ }
/* Check for goal open. */
if (goal_c > 0)
game_rz = game_iz;
}
- /*might need to put the call to grow_ball here.*/
-
- if (grow) grow_ball(fp,dt);
+ if (grow)
+ grow_ball(fp, dt);
game_update_grav(h, g);
part_step(h, t);