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 */
fp->uv[0].r);
glColor4fv(c);
-
- ball_draw(ball_b);
+ ball_draw();
}
glPopMatrix();
}
fp->zv[zi].p[1],
fp->zv[zi].p[2]);
- part_draw_goal(rx, ry, fp->zv[zi].r, goal_k, fp->zv[zi].c);
+ part_draw_goal(rx, ry, fp->zv[zi].r, goal_k);
glScalef(fp->zv[zi].r, goal_k, fp->zv[zi].r);
goal_draw();
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 },
}
}
-static int game_update_state(int *state_value)
+static int game_update_state(int bt)
{
struct s_file *fp = &file;
struct s_goal *zp;
float p[3];
float c[3];
- int bt = state_value != NULL;
-
/* Test for an item. */
if (bt && (hp = sol_item_test(fp, p, COIN_RADIUS)))
{
if (bt && goal_c == 0 && (zp = sol_goal_test(fp, p, 0)))
{
- *state_value = zp->s;
audio_play(AUD_GOAL, 1.0f);
- return zp->c ? GAME_SPEC : GAME_GOAL;
+ return GAME_GOAL;
}
/* Test for time-out. */
}
/*
- * By performing multiple physics updates or skipping an update for a given
- * graphics update, we get away with higher quality physics with little
- * impact on overall performance. Toward this end, we establish a baseline
- * maximum and minimum physics time step. If the measured frame time exceeds
- * the maximum time step, we cut the time step in half, and do two updates.
- * If THIS time step exceeds the maximum, we do four updates. And so on. On
- * the other hand, if the frame time is lower than the minimum time step, we
- * skip an update and do so until the accumulated frame time has reached this
- * minimum. In this way, the physics system is allowed to seek an optimal
- * update rate independent of, yet in integral sync with, the graphics frame
- * rate.
+ * On most hardware, rendering requires much more computing power than
+ * physics. Since physics takes less time than graphics, it make sense to
+ * detach the physics update time step from the graphics frame rate. By
+ * performing multiple physics updates for each graphics update, we get away
+ * with higher quality physics with little impact on overall performance.
+ *
+ * Toward this end, we establish a baseline maximum physics time step. If
+ * the measured frame time exceeds this maximum, we cut the time step in
+ * half, and do two updates. If THIS time step exceeds the maximum, we do
+ * four updates. And so on. In this way, the physics system is allowed to
+ * seek an optimal update rate independent of, yet in integral sync with, the
+ * graphics frame rate.
*/
-int game_step(const float g[3], float dt, int *state_value)
+int game_step(const float g[3], float dt, int bt)
{
struct s_file *fp = &file;
}
else
{
- static float accumulated_t = 0.f;
-
/* Run the sim. */
- accumulated_t += t;
-
- if (accumulated_t < MIN_DT)
- {
- n = 0;
- }
- else
- {
- t = accumulated_t;
- accumulated_t = 0.f;
- }
-
while (t > MAX_DT && n < MAX_DN)
{
t /= 2;
game_step_fade(dt);
game_update_view(dt);
- game_update_time(dt, state_value != NULL);
+ game_update_time(dt, bt);
- return game_update_state(state_value);
+ return game_update_state(bt);
}
return GAME_NONE;
}