X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=r_lerpanim.c;h=646033e1e7d0bf164d6f302552b7677623fb9fa0;hb=5090f6da276d673f6ee0b149ee2f83ef82f62902;hp=91b55bff88e3893e336796f31dc2d0dc0c6d03fd;hpb=db0e59eeca766dc6c747f546a682c56c15db8e32;p=xonotic%2Fdarkplaces.git diff --git a/r_lerpanim.c b/r_lerpanim.c index 91b55bff..646033e1 100644 --- a/r_lerpanim.c +++ b/r_lerpanim.c @@ -6,49 +6,53 @@ // LordHavoc: later note: made FRAMEBLENDINSERT macro void R_LerpAnimation(entity_render_t *r) { - int sub1, sub2, numframes, f, i; + int sub1, sub2, numframes, f, i, dolerp; double sublerp, lerp, d; animscene_t *scene; frameblend_t *blend; - - if (!r->model) - return; + dp_model_t *model = r->model; blend = r->frameblend; + blend[0].frame = blend[1].frame = blend[2].frame = blend[3].frame = 0; + blend[0].lerp = blend[1].lerp = blend[2].lerp = blend[3].lerp = 0; + + if (!model || !model->type) + return; - numframes = r->model->numframes; + numframes = model->numframes; if (r->frame1 >= numframes) { - Con_DPrintf ("CL_LerpAnimation: no such frame %d\n", r->frame1); + Con_DPrintf("CL_LerpAnimation: no such frame %d\n", r->frame1); r->frame1 = 0; } if (r->frame2 >= numframes) { - Con_DPrintf ("CL_LerpAnimation: no such frame %d\n", r->frame2); + Con_DPrintf("CL_LerpAnimation: no such frame %d\n", r->frame2); r->frame2 = 0; } // note: this could be removed, if the rendering code allows an empty blend array if (r->frame1 < 0) - Host_Error ("CL_LerpAnimation: frame1 is NULL\n"); + { + Con_Printf ("CL_LerpAnimation: frame1 is NULL\n"); + r->frame1 = 0; + } // check r_lerpmodels and round off very close blend percentages - if (!r_lerpmodels.integer) - r->framelerp = 1; - else if (r->framelerp >= (65535.0f / 65536.0f)) + dolerp = (model->type == mod_sprite) ? r_lerpsprites.integer : r_lerpmodels.integer; + + if (!dolerp || r->framelerp >= (65535.0f / 65536.0f)) r->framelerp = 1; else if (r->framelerp < (1.0f / 65536.0f)) r->framelerp = 0; - blend[0].frame = blend[1].frame = blend[2].frame = blend[3].frame = 0; - blend[0].lerp = blend[1].lerp = blend[2].lerp = blend[3].lerp = 0; - if (r->model->animscenes) + if (model->animscenes) { if (r->framelerp < 1 && r->frame1 >= 0) { - scene = r->model->animscenes + r->frame1; + scene = model->animscenes + r->frame1; lerp = 1 - r->framelerp; if (scene->framecount > 1) @@ -57,8 +61,8 @@ void R_LerpAnimation(entity_render_t *r) sub1 = (int) (sublerp); sub2 = sub1 + 1; sublerp -= sub1; - if (!r_lerpmodels.integer) - sublerp = 1; + if (!dolerp) + sublerp = 0; else if (sublerp >= (65535.0f / 65536.0f)) sublerp = 1; else if (sublerp < (1.0f / 65536.0f)) @@ -68,13 +72,8 @@ void R_LerpAnimation(entity_render_t *r) sub1 = (sub1 % scene->framecount); sub2 = (sub2 % scene->framecount); } - else - { - sub1 = bound(0, sub1, (scene->framecount - 1)); - sub2 = bound(0, sub2, (scene->framecount - 1)); - } - sub1 += scene->firstframe; - sub2 += scene->firstframe; + sub1 = bound(0, sub1, (scene->framecount - 1)) + scene->firstframe; + sub2 = bound(0, sub2, (scene->framecount - 1)) + scene->firstframe; f = sub1; d = (1 - sublerp) * lerp; #define FRAMEBLENDINSERT\ @@ -108,7 +107,7 @@ void R_LerpAnimation(entity_render_t *r) } if (r->framelerp > 0 && r->frame2 >= 0) { - scene = r->model->animscenes + r->frame2; + scene = model->animscenes + r->frame2; lerp = r->framelerp; if (scene->framecount > 1) @@ -117,8 +116,8 @@ void R_LerpAnimation(entity_render_t *r) sub1 = (int) (sublerp); sub2 = sub1 + 1; sublerp -= sub1; - if (!r_lerpmodels.integer) - sublerp = 1; + if (!dolerp) + sublerp = 0; else if (sublerp >= (65535.0f / 65536.0f)) sublerp = 1; else if (sublerp < (1.0f / 65536.0f)) @@ -128,13 +127,8 @@ void R_LerpAnimation(entity_render_t *r) sub1 = (sub1 % scene->framecount); sub2 = (sub2 % scene->framecount); } - else - { - sub1 = bound(0, sub1, (scene->framecount - 1)); - sub2 = bound(0, sub2, (scene->framecount - 1)); - } - sub1 += scene->firstframe; - sub2 += scene->firstframe; + sub1 = bound(0, sub1, (scene->framecount - 1)) + scene->firstframe; + sub2 = bound(0, sub2, (scene->framecount - 1)) + scene->firstframe; f = sub1; d = (1 - sublerp) * lerp; FRAMEBLENDINSERT