This commit is contained in:
Paul 2000-11-21 22:03:47 +00:00
parent 569ce5a865
commit ebd9bcacb0
2 changed files with 91 additions and 7 deletions

View file

@ -32,6 +32,10 @@
#include "gfx\prim.h" #include "gfx\prim.h"
#endif #endif
#ifndef __MATHTABLE_HEADER__
#include "utils\mathtab.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -297,6 +301,78 @@ void SpriteBank::prepareFT4Scaled(POLY_FT4 *_ft4,sFrameHdr *_fh,int _x,int _y,bo
} }
/*----------------------------------------------------------------------
Function:
Purpose: NB: Still needs to be aspect corrected.. (PKG)
Params:
Returns:
---------------------------------------------------------------------- */
void SpriteBank::prepareFT4RotatedScaled(POLY_FT4 *_ft4,sFrameHdr *_fh,int _xCentre,int _yCentre,int _xScale,int _yScale,int _rot)
{
int halfW,halfH;
int ca,sa;
int cw,ch,sw,sh;
int width,height;
int aspect;
halfW=(_fh->W*_xScale)>>(12+1);
halfH=(_fh->H*_yScale)>>(12+1);
ca=mcos(_rot);
sa=msin(_rot);
cw=(ca*halfW)>>12;
ch=(ca*halfH)>>12;
sw=(sa*halfW)>>12;
sh=(sa*halfH)>>12;
// aspect=(512<<12)/384;//((_fh->H<<12)/_fh->W)/2;
// ch=(ch*aspect)>>12;
// sh=(sh*aspect)>>12;
_ft4->x0=_xCentre-cw+sh; _ft4->y0=_yCentre-sw-ch;
_ft4->x1=_xCentre+cw+sh; _ft4->y1=_yCentre+sw-ch;
_ft4->x2=_xCentre-cw-sh; _ft4->y2=_yCentre-sw+ch;
_ft4->x3=_xCentre+cw-sh; _ft4->y3=_yCentre+sw+ch;
setShadeTexPolyFT4(_ft4);
setShadeTex(_ft4,0);
setRGB0(_ft4,128,128,128);
// setUVTp(_fh,_ft4,false,false);
////////////////////////////////
int U=_fh->U;
int V=_fh->V;
int W=_fh->W;
int H=_fh->H;
if (!_fh->Rotated)
{
_ft4->u0=U;
_ft4->u1=U+W;
_ft4->u2=U;
_ft4->u3=U+W;
_ft4->v0=V;
_ft4->v1=V;
_ft4->v2=V+H-1;
_ft4->v3=V+H-1;
}
else
{
_ft4->v0=V+W-1;
_ft4->v2=V+W-1;
_ft4->v1=V-1;
_ft4->v3=V-1;
_ft4->u0=U;
_ft4->u1=U;
_ft4->u2=U+H;
_ft4->u3=U+H;
}
_ft4->tpage=_fh->TPage;
_ft4->clut=_fh->Clut;
////////////////////////////////
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Function: Function:
Purpose: Purpose:
@ -375,7 +451,3 @@ void SpriteBank::setUVTp(sFrameHdr *_fh,POLY_FT4 *_ft4,int _xFlip,int _yFlip)
_ft4->tpage=_fh->TPage; _ft4->tpage=_fh->TPage;
_ft4->clut=_fh->Clut; _ft4->clut=_fh->Clut;
} }

View file

@ -86,7 +86,6 @@ inline POLY_FT4 *printFT4(int _frame,int _x,int _y,int _xFlip,int _yFlip,int _ot
inline POLY_FT4 *printFT4(sFrameHdr *_fh,int _x,int _y,int _xFlip,int _yFlip,int _ot) inline POLY_FT4 *printFT4(sFrameHdr *_fh,int _x,int _y,int _xFlip,int _yFlip,int _ot)
{ {
POLY_FT4 *ft4=GetPrimFT4(); POLY_FT4 *ft4=GetPrimFT4();
prepareFT4(ft4,_fh,_x,_y,_xFlip,_yFlip); prepareFT4(ft4,_fh,_x,_y,_xFlip,_yFlip);
AddPrimToList(ft4,_ot); AddPrimToList(ft4,_ot);
return(ft4); return(ft4);
@ -95,17 +94,30 @@ inline POLY_FT4 *printFT4Scaled(int _frame,int _x,int _y,int _xFlip,int _yFlip,i
inline POLY_FT4 *printFT4Scaled(sFrameHdr *_fh,int _x,int _y,int _xFlip,int _yFlip,int _ot, long _z) inline POLY_FT4 *printFT4Scaled(sFrameHdr *_fh,int _x,int _y,int _xFlip,int _yFlip,int _ot, long _z)
{ {
POLY_FT4 *ft4=GetPrimFT4(); POLY_FT4 *ft4=GetPrimFT4();
prepareFT4Scaled(ft4,_fh,_x,_y,_xFlip,_yFlip,_z ); prepareFT4Scaled(ft4,_fh,_x,_y,_xFlip,_yFlip,_z );
AddPrimToList(ft4,_ot); AddPrimToList(ft4,_ot);
return(ft4); return(ft4);
} }
inline POLY_FT4 *printRotatedScaledSprite(sFrameHdr *_fh,int _xCentre,int _yCentre,int _xScale,int _yScale,int _rot,int _ot)
{
ASSERT(_rot>=0);
ASSERT(_rot<=4095);
POLY_FT4 *ft4=GetPrimFT4();
prepareFT4RotatedScaled(ft4,_fh,_xCentre,_yCentre,_xScale,_yScale,_rot);
AddPrimToList(ft4,_ot);
return(ft4);
}
// Hmm.. why did these used to be private? // Hmm.. why did these used to be private?
void prepareFT4(POLY_FT4 *_ft4,sFrameHdr *_fh,int _x,int _y,bool _xFlip,bool _yFlip); void prepareFT4(POLY_FT4 *_ft4,sFrameHdr *_fh,int _x,int _y,bool _xFlip,bool _yFlip);
void prepareFT4Scaled(POLY_FT4 *_ft4,sFrameHdr *_fh,int _x,int _y,bool _xFlip,bool _yFlip,long _z); void prepareFT4Scaled(POLY_FT4 *_ft4,sFrameHdr *_fh,int _x,int _y,bool _xFlip,bool _yFlip,long _z);
void prepareFT4RotatedScaled(POLY_FT4 *_ft4,sFrameHdr *_fh,int _xCentre,int _yCentre,int _xScale,int _yScale,int _rot);
void setUVTp(sFrameHdr *_fh,POLY_FT4 *_ft4,int _xFlip,int _yYFlip); void setUVTp(sFrameHdr *_fh,POLY_FT4 *_ft4,int _xFlip,int _yYFlip);
// void printRotatedScaledSprite(sFrameHdr *_fh,int _xCentre,int _yCentre,int _xScale,int _yScale,int _rot,int _ot);
private: private:
class SpriteBankInstance *m_SpriteBankInstance; class SpriteBankInstance *m_SpriteBankInstance;