void game_lerp_apply(struct game_lerp *gl, struct game_draw *gd) { float a = gl->alpha; /* Solid. */ sol_lerp_apply(&gl->lerp, a); /* Particles. */ part_lerp_apply(a); /* Tilt. */ v_lerp(gd->tilt.x, gl->tilt[PREV].x, gl->tilt[CURR].x, a); v_lerp(gd->tilt.z, gl->tilt[PREV].z, gl->tilt[CURR].z, a); gd->tilt.rx = flerp(gl->tilt[PREV].rx, gl->tilt[CURR].rx, a); gd->tilt.rz = flerp(gl->tilt[PREV].rz, gl->tilt[CURR].rz, a); /* View. */ v_lerp(gd->view.c, gl->view[PREV].c, gl->view[CURR].c, a); v_lerp(gd->view.p, gl->view[PREV].p, gl->view[CURR].p, a); e_lerp(gd->view.e, gl->view[PREV].e, gl->view[CURR].e, a); /* Effects. */ gd->goal_k = flerp(gl->goal_k[PREV], gl->goal_k[CURR], a); gd->jump_dt = flerp(gl->jump_dt[PREV], gl->jump_dt[CURR], a); }
void sol_lerp_apply(struct s_lerp *fp, float a) { int i; for (i = 0; i < fp->mc; i++) { if (fp->mv[i][PREV].pi == fp->mv[i][CURR].pi) fp->vary->mv[i].t = flerp(fp->mv[i][PREV].t, fp->mv[i][CURR].t, a); else fp->vary->mv[i].t = fp->mv[i][CURR].t * a; fp->vary->mv[i].pi = fp->mv[i][CURR].pi; } for (i = 0; i < fp->uc; i++) { e_lerp(fp->vary->uv[i].e, fp->uv[i][PREV].e, fp->uv[i][CURR].e, a); v_lerp(fp->vary->uv[i].p, fp->uv[i][PREV].p, fp->uv[i][CURR].p, a); e_lerp(fp->vary->uv[i].E, fp->uv[i][PREV].E, fp->uv[i][CURR].E, a); fp->vary->uv[i].r = flerp(fp->uv[i][PREV].r, fp->uv[i][CURR].r, a); } }