mirror of
https://github.com/ZDoom/Raze.git
synced 2025-06-03 10:41:24 +00:00
-consolidated sprite rotation formula in 2 inline functions.
This commit is contained in:
parent
c066f1754c
commit
ada4af8fb7
3 changed files with 57 additions and 46 deletions
|
@ -46,6 +46,8 @@ BEGIN_DUKE_NS
|
||||||
|
|
||||||
void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interpfrac)
|
void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interpfrac)
|
||||||
{
|
{
|
||||||
|
DAngle viewang = DAngle::fromBuild(a);
|
||||||
|
DAngle kang;
|
||||||
DVector2 viewVec(x * inttoworld, y * inttoworld);
|
DVector2 viewVec(x * inttoworld, y * inttoworld);
|
||||||
int k, p;
|
int k, p;
|
||||||
int l, t1, t3, t4;
|
int l, t1, t3, t4;
|
||||||
|
@ -85,7 +87,7 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
k = (((t->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(t->angle, viewang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -258,8 +260,8 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
k = angletorotation2(h->spr.angle, kang);
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
k = 12 - k;
|
k = 12 - k;
|
||||||
|
@ -276,10 +278,8 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
if (h->temp_data[0] < 4)
|
k = angletorotation2(h->spr.angle, kang);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
|
||||||
else k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
|
||||||
|
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
|
@ -368,7 +368,7 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(h->spr.angle, viewang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -491,12 +491,12 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
else switch (l)
|
else switch (l)
|
||||||
{
|
{
|
||||||
case 2:
|
case 2:
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 1;
|
k = angletorotation1(h->spr.angle, viewang, 8, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) >> 7) & 7;
|
k = angletorotation1(h->spr.angle, viewang, 7);
|
||||||
if (k > 3)
|
if (k > 3)
|
||||||
{
|
{
|
||||||
t->cstat |= CSTAT_SPRITE_XFLIP;
|
t->cstat |= CSTAT_SPRITE_XFLIP;
|
||||||
|
@ -506,8 +506,8 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) >> 8) & 7;
|
k = angletorotation1(h->spr.angle, kang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -516,8 +516,8 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
k = angletorotation2(h->spr.angle, kang);
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
k = 12 - k;
|
k = 12 - k;
|
||||||
|
@ -526,7 +526,7 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(h->spr.angle, viewang);
|
||||||
t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -657,7 +657,7 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
k = (((t->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(t->angle, viewang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -714,7 +714,7 @@ void animatesprites_d(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
k = (((t->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(t->angle, viewang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
|
|
@ -39,6 +39,8 @@ BEGIN_DUKE_NS
|
||||||
|
|
||||||
void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interpfrac)
|
void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interpfrac)
|
||||||
{
|
{
|
||||||
|
DAngle kang;
|
||||||
|
DAngle viewang = DAngle::fromBuild(a);
|
||||||
DVector2 viewVec(x * inttoworld, y * inttoworld);
|
DVector2 viewVec(x * inttoworld, y * inttoworld);
|
||||||
int k, p;
|
int k, p;
|
||||||
int l, t1, t3, t4;
|
int l, t1, t3, t4;
|
||||||
|
@ -63,7 +65,7 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
case CHAIR3:
|
case CHAIR3:
|
||||||
|
|
||||||
k = (((t->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(t->angle, viewang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -252,8 +254,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
}
|
}
|
||||||
else if (OwnerAc->spr.picnum == MAMA)
|
else if (OwnerAc->spr.picnum == MAMA)
|
||||||
{
|
{
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) >> 8) & 7;
|
k = angletorotation1(h->spr.angle, kang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -270,8 +272,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
case EMPTYBIKE:
|
case EMPTYBIKE:
|
||||||
if (!isRRRA()) goto default_case;
|
if (!isRRRA()) goto default_case;
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
k = angletorotation2(h->spr.angle, kang);
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
k = 12 - k;
|
k = 12 - k;
|
||||||
|
@ -282,8 +284,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
case EMPTYBOAT:
|
case EMPTYBOAT:
|
||||||
if (!isRRRA()) goto default_case;
|
if (!isRRRA()) goto default_case;
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
k = angletorotation2(h->spr.angle, kang);
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
k = 12 - k;
|
k = 12 - k;
|
||||||
|
@ -293,8 +295,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
t->picnum = EMPTYBOAT + k;
|
t->picnum = EMPTYBOAT + k;
|
||||||
break;
|
break;
|
||||||
case RPG:
|
case RPG:
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
k = angletorotation2(h->spr.angle, kang);
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
k = 12 - k;
|
k = 12 - k;
|
||||||
|
@ -305,8 +307,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
case RPG2:
|
case RPG2:
|
||||||
if (!isRRRA()) goto default_case;
|
if (!isRRRA()) goto default_case;
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
k = angletorotation2(h->spr.angle, kang);
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
k = 12 - k;
|
k = 12 - k;
|
||||||
|
@ -318,10 +320,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
|
|
||||||
case RECON:
|
case RECON:
|
||||||
|
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
if (h->temp_data[0] < 4)
|
k = angletorotation2(h->spr.angle, kang);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
|
||||||
else k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
|
||||||
|
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
|
@ -412,7 +412,7 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(h->spr.angle, viewang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -475,7 +475,7 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
}
|
}
|
||||||
else if (ps[p].OnMotorcycle)
|
else if (ps[p].OnMotorcycle)
|
||||||
{
|
{
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) / 170);
|
k = angletorotation2(h->spr.angle, viewang);
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
k = 12 - k;
|
k = 12 - k;
|
||||||
|
@ -501,7 +501,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
}
|
}
|
||||||
else if (ps[p].OnBoat)
|
else if (ps[p].OnBoat)
|
||||||
{
|
{
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) / 170);
|
k = angletorotation2(h->spr.angle, viewang);
|
||||||
|
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
k = 12 - k;
|
k = 12 - k;
|
||||||
|
@ -623,12 +624,12 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
else switch (l)
|
else switch (l)
|
||||||
{
|
{
|
||||||
case 2:
|
case 2:
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 1;
|
k = angletorotation1(h->spr.angle, viewang, 8, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) >> 7) & 7;
|
k = angletorotation1(h->spr.angle, viewang, 7);
|
||||||
if (k > 3)
|
if (k > 3)
|
||||||
{
|
{
|
||||||
t->cstat |= CSTAT_SPRITE_XFLIP;
|
t->cstat |= CSTAT_SPRITE_XFLIP;
|
||||||
|
@ -638,8 +639,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) >> 8) & 7;
|
k = angletorotation1(h->spr.angle, kang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -648,8 +649,8 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) / 170);
|
k = angletorotation2(h->spr.angle, kang);
|
||||||
if (k > 6)
|
if (k > 6)
|
||||||
{
|
{
|
||||||
k = 12 - k;
|
k = 12 - k;
|
||||||
|
@ -658,15 +659,15 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
k = (((h->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(h->spr.angle, viewang);
|
||||||
t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bg = badguy(h);
|
bg = badguy(h);
|
||||||
if (bg && h->spr.statnum == 2 && h->spr.extra > 0)
|
if (bg && h->spr.statnum == 2 && h->spr.extra > 0)
|
||||||
{
|
{
|
||||||
k = getangle(h->spr.pos - viewVec);
|
kang = VecToAngle(h->spr.pos - viewVec);
|
||||||
k = (((h->int_ang() + 3072 + 128 - k) & 2047) >> 8) & 7;
|
k = angletorotation1(h->spr.angle, kang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -887,7 +888,7 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
break;
|
break;
|
||||||
case PLAYERONWATER:
|
case PLAYERONWATER:
|
||||||
|
|
||||||
k = (((t->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(t->angle, viewang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
@ -941,7 +942,7 @@ void animatesprites_r(tspriteArray& tsprites, int x, int y, int a, double interp
|
||||||
|
|
||||||
case CAMERA1:
|
case CAMERA1:
|
||||||
case RAT:
|
case RAT:
|
||||||
k = (((t->int_ang() + 3072 + 128 - a) & 2047) >> 8) & 7;
|
k = angletorotation1(t->angle, viewang);
|
||||||
if (k > 4)
|
if (k > 4)
|
||||||
{
|
{
|
||||||
k = 8 - k;
|
k = 8 - k;
|
||||||
|
|
|
@ -257,4 +257,14 @@ inline DAngle randomAngle(DAngle span)
|
||||||
return DAngle::fromDeg(krandf(span.Degrees()));
|
return DAngle::fromDeg(krandf(span.Degrees()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline int angletorotation1(DAngle sprang, DAngle viewang, int shiftv = 8, int andv = 7)
|
||||||
|
{
|
||||||
|
return (((sprang.Buildang() + 3072 + 128 - viewang.Buildang()) & 2047) >> shiftv) & andv;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int angletorotation2(DAngle sprang, DAngle viewang)
|
||||||
|
{
|
||||||
|
return ((sprang.Buildang() + 3072 + 128 - viewang.Buildang()) & 2047) / 170;
|
||||||
|
}
|
||||||
|
|
||||||
END_DUKE_NS
|
END_DUKE_NS
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue