static float jump_p[3]; /* Jump destination */
static float fade_k = 0.0; /* Fade in/out level */
static float fade_d = 0.0; /* Fade in/out direction */
-static int ball_b = 0; /* Is the ball a bonus ball? */
+
+/*---------------------------------------------------------------------------*/
static int grow = 0; /* Should the ball be changing size? */
static float grow_orig = 0; /* the original ball size */
#define GROW_BIG 1.5f /* large factor */
#define GROW_SMALL 0.5f /* small factor */
-/*---------------------------------------------------------------------------*/
+static int grow_state = 0; /* Current state (values -1, 0, +1) */
-static void grow_set(const struct s_file *fp, int type)
+static void grow_init(const struct s_file *fp, int type)
{
if (!got_orig)
{
- grow_orig = fp->uv->r;
- grow_goal = grow_orig;
- grow_strt = grow_orig;
- got_orig = 1;
+ grow_orig = fp->uv->r;
+ grow_goal = grow_orig;
+ grow_strt = grow_orig;
+
+ grow_state = 0;
+
+ got_orig = 1;
}
- switch (type)
+ if (type == ITEM_SHRINK)
{
- case ITEM_SHRINK:
audio_play(AUD_SHRINK, 1.f);
- if (grow_goal == grow_orig * GROW_SMALL)
- return;
- else if (grow_goal == grow_orig * GROW_BIG)
- {
- grow_goal = grow_orig;
- grow = 1;
- }
- else
+ switch (grow_state)
{
+ case -1:
+ break;
+
+ case 0:
grow_goal = grow_orig * GROW_SMALL;
+ grow_state = -1;
grow = 1;
- }
-
- break;
+ break;
- case ITEM_GROW:
+ case +1:
+ grow_goal = grow_orig;
+ grow_state = 0;
+ grow = 1;
+ break;
+ }
+ }
+ else if (type == ITEM_GROW)
+ {
audio_play(AUD_GROW, 1.f);
- if (grow_goal == grow_orig * GROW_BIG)
- return;
- else if (grow_goal == grow_orig * GROW_SMALL)
+ switch (grow_state)
{
- grow = 1;
+ case -1:
grow_goal = grow_orig;
- }
- else
- {
- grow_goal = grow_orig * GROW_BIG;
+ grow_state = 0;
grow = 1;
- }
+ break;
- break;
+ case 0:
+ grow_goal = grow_orig * GROW_BIG;
+ grow_state = +1;
+ grow = 1;
+ break;
- default:
- break;
+ case +1:
+ break;
+ }
}
if (grow)
}
}
-static void grow_ball(const struct s_file *fp, float dt)
+static void grow_step(const struct s_file *fp, float dt)
{
float dr;
+ if (!grow)
+ return;
+
/* Calculate new size based on how long since you touched the coin... */
grow_t += dt;
fp->uv->r = dr;
}
+/*---------------------------------------------------------------------------*/
+
static void view_init(void)
{
view_a = 0.f;
fp->uv[0].r);
glColor4fv(c);
-
- ball_draw(ball_b);
+ ball_draw();
}
glPopMatrix();
}
static void game_draw_light(void)
{
const float light_p[2][4] = {
- { -8.0f, +32.0f, -8.0f, 1.0f },
- { +8.0f, +32.0f, +8.0f, 1.0f },
+ { -8.0f, +32.0f, -8.0f, 0.0f },
+ { +8.0f, +32.0f, +8.0f, 0.0f },
};
const float light_c[2][4] = {
{ 1.0f, 0.8f, 0.8f, 1.0f },
sol_draw(&file);
- if (config_get_d(CONFIG_SHADOW))
+ if (pose == 0 && config_get_d(CONFIG_SHADOW))
{
shad_draw_set(ball_p, ball_r);
sol_shad(&file);
item_color(hp, c);
part_burst(p, c);
- grow_set(fp, hp->t);
+ grow_init(fp, hp->t);
if (hp->t == ITEM_COIN)
{
game_rz = game_iz;
}
- if (grow)
- grow_ball(fp, dt);
+ grow_step(fp, dt);
game_update_grav(h, g);
part_step(h, t);