mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-20 18:01:16 +00:00
Merge branch 'rotsprite3' into 'next'
More rollangle changes See merge request STJr/SRB2!582
This commit is contained in:
commit
152a63b682
4 changed files with 35 additions and 27 deletions
|
@ -5501,17 +5501,12 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
|||
fixed_t spr_offset, spr_topoffset;
|
||||
#ifdef ROTSPRITE
|
||||
patch_t *rotsprite = NULL;
|
||||
angle_t arollangle;
|
||||
UINT32 rollangle;
|
||||
INT32 rollangle = 0;
|
||||
#endif
|
||||
|
||||
if (!thing)
|
||||
return;
|
||||
|
||||
#ifdef ROTSPRITE
|
||||
arollangle = thing->rollangle;
|
||||
rollangle = AngleFixed(arollangle)>>FRACBITS;
|
||||
#endif
|
||||
this_scale = FIXED_TO_FLOAT(thing->scale);
|
||||
|
||||
// transform the origin point
|
||||
|
@ -5618,11 +5613,11 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
|||
spr_topoffset = spritecachedinfo[lumpoff].topoffset;
|
||||
|
||||
#ifdef ROTSPRITE
|
||||
if (rollangle > 0)
|
||||
if (thing->rollangle)
|
||||
{
|
||||
rollangle = R_GetRollAngle(thing->rollangle);
|
||||
if (!sprframe->rotsprite.cached[rot])
|
||||
R_CacheRotSprite(thing->sprite, (thing->frame & FF_FRAMEMASK), sprinfo, sprframe, rot, flip);
|
||||
rollangle /= ROTANGDIFF;
|
||||
rotsprite = sprframe->rotsprite.patch[rot][rollangle];
|
||||
if (rotsprite != NULL)
|
||||
{
|
||||
|
|
|
@ -49,8 +49,6 @@
|
|||
#endif
|
||||
|
||||
static unsigned char imgbuf[1<<26];
|
||||
fixed_t cosang2rad[ROTANGLES];
|
||||
fixed_t sinang2rad[ROTANGLES];
|
||||
|
||||
//
|
||||
// R_CheckIfPatch
|
||||
|
@ -1123,6 +1121,24 @@ static UINT16 GetPatchPixel(patch_t *patch, INT32 x, INT32 y, boolean flip)
|
|||
}
|
||||
|
||||
#ifdef ROTSPRITE
|
||||
//
|
||||
// R_GetRollAngle
|
||||
//
|
||||
// Angles precalculated in R_InitSprites.
|
||||
//
|
||||
fixed_t rollcosang[ROTANGLES];
|
||||
fixed_t rollsinang[ROTANGLES];
|
||||
INT32 R_GetRollAngle(angle_t rollangle)
|
||||
{
|
||||
INT32 ra = AngleFixed(rollangle)>>FRACBITS;
|
||||
#if (ROTANGDIFF > 1)
|
||||
ra += (ROTANGDIFF/2);
|
||||
#endif
|
||||
ra /= ROTANGDIFF;
|
||||
ra %= ROTANGLES;
|
||||
return ra;
|
||||
}
|
||||
|
||||
//
|
||||
// R_CacheRotSprite
|
||||
//
|
||||
|
@ -1180,12 +1196,12 @@ void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, sp
|
|||
leftoffset = width - leftoffset;
|
||||
}
|
||||
|
||||
for (angle = 0; angle < ROTANGLES; angle++)
|
||||
for (angle = 1; angle < ROTANGLES; angle++)
|
||||
{
|
||||
INT32 newwidth, newheight;
|
||||
|
||||
ca = cosang2rad[angle];
|
||||
sa = sinang2rad[angle];
|
||||
ca = rollcosang[angle];
|
||||
sa = rollsinang[angle];
|
||||
|
||||
// Find the dimensions of the rotated patch.
|
||||
{
|
||||
|
|
|
@ -62,11 +62,12 @@ void R_ParseSPRTINFOLump(UINT16 wadNum, UINT16 lumpNum);
|
|||
|
||||
// Sprite rotation
|
||||
#ifdef ROTSPRITE
|
||||
INT32 R_GetRollAngle(angle_t rollangle);
|
||||
void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, spriteframe_t *sprframe, INT32 rot, UINT8 flip);
|
||||
void R_FreeSingleRotSprite(spritedef_t *spritedef);
|
||||
void R_FreeSkinRotSprite(size_t skinnum);
|
||||
extern fixed_t cosang2rad[ROTANGLES];
|
||||
extern fixed_t sinang2rad[ROTANGLES];
|
||||
extern fixed_t rollcosang[ROTANGLES];
|
||||
extern fixed_t rollsinang[ROTANGLES];
|
||||
#endif
|
||||
|
||||
#endif // __R_PATCH__
|
||||
|
|
|
@ -500,7 +500,7 @@ void R_InitSprites(void)
|
|||
{
|
||||
size_t i;
|
||||
#ifdef ROTSPRITE
|
||||
INT32 angle, ra;
|
||||
INT32 angle;
|
||||
float fa;
|
||||
#endif
|
||||
|
||||
|
@ -508,14 +508,11 @@ void R_InitSprites(void)
|
|||
negonearray[i] = -1;
|
||||
|
||||
#ifdef ROTSPRITE
|
||||
for (angle = 0; angle < ROTANGLES; angle++)
|
||||
for (angle = 1; angle < ROTANGLES; angle++)
|
||||
{
|
||||
ra = (ROTANGDIFF * angle);
|
||||
if (!ra)
|
||||
ra = (ROTANGDIFF / 2) + 1;
|
||||
fa = ANG2RAD(FixedAngle(ra<<FRACBITS));
|
||||
cosang2rad[angle] = FLOAT_TO_FIXED(cos(-fa));
|
||||
sinang2rad[angle] = FLOAT_TO_FIXED(sin(-fa));
|
||||
fa = ANG2RAD(FixedAngle((ROTANGDIFF * angle)<<FRACBITS));
|
||||
rollcosang[angle] = FLOAT_TO_FIXED(cos(-fa));
|
||||
rollsinang[angle] = FLOAT_TO_FIXED(sin(-fa));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1129,8 +1126,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
fixed_t spr_offset, spr_topoffset;
|
||||
#ifdef ROTSPRITE
|
||||
patch_t *rotsprite = NULL;
|
||||
angle_t arollangle = thing->rollangle;
|
||||
UINT32 rollangle = AngleFixed(arollangle)>>FRACBITS;
|
||||
INT32 rollangle = 0;
|
||||
#endif
|
||||
|
||||
#ifndef PROPERPAPER
|
||||
|
@ -1262,11 +1258,11 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
spr_topoffset = spritecachedinfo[lump].topoffset;
|
||||
|
||||
#ifdef ROTSPRITE
|
||||
if (rollangle > 0)
|
||||
if (thing->rollangle)
|
||||
{
|
||||
rollangle = R_GetRollAngle(thing->rollangle);
|
||||
if (!sprframe->rotsprite.cached[rot])
|
||||
R_CacheRotSprite(thing->sprite, (thing->frame & FF_FRAMEMASK), sprinfo, sprframe, rot, flip);
|
||||
rollangle /= ROTANGDIFF;
|
||||
rotsprite = sprframe->rotsprite.patch[rot][rollangle];
|
||||
if (rotsprite != NULL)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue