{
game_lerp_copy(&gl);
/* Hack to sync state before the next update. */
- game_lerp_apply(&gl, &gd, 1.0f);
+ game_lerp_apply(&gl, &gd);
first_update = 0;
break;
}
/*---------------------------------------------------------------------------*/
-void game_client_draw(int pose, float t, float a)
+void game_client_blend(float a)
{
- game_lerp_apply(&gl, &gd, a);
+ gl.alpha = a;
+}
+
+void game_client_draw(int pose, float t)
+{
+ game_lerp_apply(&gl, &gd);
game_draw(&gd, pose, t);
}
int game_client_init(const char *);
void game_client_free(void);
void game_client_sync(fs_file);
-void game_client_draw(int, float, float);
+void game_client_draw(int, float);
+void game_client_blend(float);
int curr_clock(void);
int curr_coins(void);
void game_lerp_init(struct game_lerp *gl, struct game_draw *gd)
{
+ gl->alpha = 1.0f;
+
sol_load_lerp(&gl->lerp, &gd->file.vary);
gl->tilt[PREV] = gl->tilt[CURR] = gd->tilt;
gl->jump_dt[PREV] = gl->jump_dt[CURR];
}
-void game_lerp_apply(struct game_lerp *gl, struct game_draw *gd, float a)
+void game_lerp_apply(struct game_lerp *gl, struct game_draw *gd)
{
+ float a = gl->alpha;
+
/* Solid. */
sol_lerp_apply(&gl->lerp, a);
struct game_lerp
{
+ float alpha; /* Interpolation factor */
+
struct s_lerp lerp;
struct game_tilt tilt[2];
void game_lerp_init(struct game_lerp *, struct game_draw *);
void game_lerp_free(struct game_lerp *);
void game_lerp_copy(struct game_lerp *);
-void game_lerp_apply(struct game_lerp *, struct game_draw *, float);
+void game_lerp_apply(struct game_lerp *, struct game_draw *);
/*---------------------------------------------------------------------------*/
video_clear();
game_client_fly(1.0f);
game_kill_fade();
- game_client_draw(POSE_LEVEL, 0, 1.0f);
+ game_client_draw(POSE_LEVEL, 0);
SDL_GL_SwapBuffers();
image_snap(filename);
}
video_pop_matrix();
- game_client_draw(POSE_BALL, t, demo_play_blend());
+ game_client_draw(POSE_BALL, t);
gui_paint(id);
}
demo_replay_stop(0);
load_ball_demo();
}
+
+ game_client_blend(demo_play_blend());
}
static int ball_buttn(int b, int d)
static void demo_play_paint(int id, float t)
{
- game_client_draw(0, t, demo_play_blend());
+ game_client_draw(0, t);
if (show_hud)
hud_paint();
goto_state(&st_demo_end);
}
else
+ {
progress_step();
+ game_client_blend(demo_play_blend());
+ }
}
static void set_speed(int d)
static void demo_end_paint(int id, float t)
{
- game_client_draw(0, t, demo_play_blend());
+ game_client_draw(0, t);
gui_paint(id);
if (demo_paused)
static void help_demo_paint(int id, float t)
{
- game_client_draw(0, t, demo_play_blend());
+ game_client_draw(0, t);
}
static void help_demo_timer(int id, float dt)
if (!demo_replay_step(dt))
goto_state(&st_help);
+
+ game_client_blend(demo_play_blend());
}
static int help_demo_buttn(int b, int d)
static void poser_paint(int id, float t)
{
- game_client_draw(POSE_LEVEL, t, 1.0f);
+ game_client_draw(POSE_LEVEL, t);
}
static int poser_buttn(int c, int d)
video_pop_matrix();
}
else
- game_client_draw(0, t, 1.0f);
+ game_client_draw(0, t);
gui_paint(id);
}
static void play_ready_paint(int id, float t)
{
- game_client_draw(0, t, 1.0f);
+ game_client_draw(0, t);
hud_view_paint();
gui_paint(id);
}
static void play_set_paint(int id, float t)
{
- game_client_draw(0, t, 1.0f);
+ game_client_draw(0, t);
hud_view_paint();
gui_paint(id);
}
static void play_loop_paint(int id, float t)
{
- game_client_draw(0, t, game_server_blend());
+ game_client_draw(0, t);
if (show_hud)
hud_paint();
game_server_step(dt);
game_client_sync(demo_fp);
+ game_client_blend(game_server_blend());
switch (curr_status())
{
static void look_paint(int id, float t)
{
- game_client_draw(0, t, 1.0f);
+ game_client_draw(0, t);
}
static void look_point(int id, int x, int y, int dx, int dy)
void shared_paint(int id, float t)
{
- game_client_draw(0, t, 1.0f);
+ game_client_draw(0, t);
gui_paint(id);
}