This commit is contained in:
parent
569ce5a865
commit
ebd9bcacb0
2 changed files with 91 additions and 7 deletions
|
@ -32,6 +32,10 @@
|
|||
#include "gfx\prim.h"
|
||||
#endif
|
||||
|
||||
#ifndef __MATHTABLE_HEADER__
|
||||
#include "utils\mathtab.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* 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:
|
||||
Purpose:
|
||||
|
@ -375,7 +451,3 @@ void SpriteBank::setUVTp(sFrameHdr *_fh,POLY_FT4 *_ft4,int _xFlip,int _yFlip)
|
|||
_ft4->tpage=_fh->TPage;
|
||||
_ft4->clut=_fh->Clut;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
POLY_FT4 *ft4=GetPrimFT4();
|
||||
|
||||
prepareFT4(ft4,_fh,_x,_y,_xFlip,_yFlip);
|
||||
AddPrimToList(ft4,_ot);
|
||||
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)
|
||||
{
|
||||
POLY_FT4 *ft4=GetPrimFT4();
|
||||
|
||||
prepareFT4Scaled(ft4,_fh,_x,_y,_xFlip,_yFlip,_z );
|
||||
AddPrimToList(ft4,_ot);
|
||||
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?
|
||||
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 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 printRotatedScaledSprite(sFrameHdr *_fh,int _xCentre,int _yCentre,int _xScale,int _yScale,int _rot,int _ot);
|
||||
|
||||
|
||||
private:
|
||||
class SpriteBankInstance *m_SpriteBankInstance;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue