133 lines
4.1 KiB
C++
133 lines
4.1 KiB
C++
/*=========================================================================
|
|
|
|
sprbank.h
|
|
|
|
Author: PKG
|
|
Created:
|
|
Project: PRLSR
|
|
Purpose:
|
|
|
|
Copyright (c) 2000 Climax Development Ltd
|
|
|
|
===========================================================================*/
|
|
|
|
#ifndef __GFX_SPRBANK_H__
|
|
#define __GFX_SPRBANK_H__
|
|
|
|
/*----------------------------------------------------------------------
|
|
Includes
|
|
-------- */
|
|
|
|
#ifndef _GLOBAL_HEADER_
|
|
#include "system\global.h"
|
|
#endif
|
|
|
|
#ifndef __VRAM_H__
|
|
#include "gfx\tpage.h"
|
|
#endif
|
|
|
|
#ifndef __PRIM_HEADER__
|
|
#include "gfx\prim.h"
|
|
#endif
|
|
|
|
|
|
/* Std Lib
|
|
------- */
|
|
|
|
/*----------------------------------------------------------------------
|
|
Tyepdefs && Defines
|
|
------------------- */
|
|
|
|
/*----------------------------------------------------------------------
|
|
Structure defintions
|
|
-------------------- */
|
|
// Single instance of a sprite bank
|
|
class SpriteBankInstance
|
|
{
|
|
public:
|
|
SpriteBankInstance( SpriteBankInstance *_next );
|
|
~SpriteBankInstance();
|
|
|
|
sFrameHdr *getFrameHeaders() {return m_frameHdr;}
|
|
|
|
void load( FileEquate _file );
|
|
int dump();
|
|
|
|
SpriteBankInstance *getNext() { return m_next; }
|
|
void setNext( SpriteBankInstance *_next) { m_next = _next; }
|
|
FileEquate getFile() { return m_file; }
|
|
|
|
//private:
|
|
sFrameHdr *m_frameHdr;
|
|
TPAGE_DESC m_tpageDesc;
|
|
|
|
FileEquate m_file;
|
|
int m_refCount;
|
|
|
|
SpriteBankInstance *m_next;
|
|
};
|
|
|
|
// Class for a bank of sprites ( actually a reference to a SpriteBankInstance )
|
|
class SpriteBank
|
|
{
|
|
public:
|
|
SpriteBank();
|
|
~SpriteBank();
|
|
|
|
void load( FileEquate _file );
|
|
void dump();
|
|
|
|
sFrameHdr * getHeaders() {return (m_SpriteBankInstance->getFrameHeaders());}
|
|
sFrameHdr * getFrameHeader( int _frame ) {return (&m_SpriteBankInstance->getFrameHeaders()[ _frame ]);}
|
|
s32 getFrameWidth( int _frame ) {return (m_SpriteBankInstance->getFrameHeaders()[ _frame ].W);}
|
|
s32 getFrameHeight( int _frame ) {return (m_SpriteBankInstance->getFrameHeaders()[ _frame ].H);}
|
|
|
|
inline POLY_FT4 *printFT4(int _frame,int _x,int _y,int _xFlip,int _yFlip,int _ot) {return printFT4(&m_SpriteBankInstance->getFrameHeaders()[ _frame ],_x,_y,_xFlip,_yFlip,_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);
|
|
}
|
|
inline POLY_FT4 *printFT4Scaled(int _frame,int _x,int _y,int _xFlip,int _yFlip,int _ot,long _z) {return printFT4Scaled(&m_SpriteBankInstance->getFrameHeaders()[ _frame ],_x,_y,_xFlip,_yFlip,_ot,_z);}
|
|
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(int _frame,int _xCentre,int _yCentre,int _xScale,int _yScale,int _rot,int _ot) {return printRotatedScaledSprite(&m_SpriteBankInstance->getFrameHeaders()[ _frame ],_xCentre,_yCentre,_xScale,_yScale,_rot,_ot);}
|
|
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 prepareGT4(POLY_GT4 *_gt4,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 _yFlip);
|
|
void setUVTp(sFrameHdr *_fh,POLY_GT4 *_gt4,int _xFlip,int _yFlip);
|
|
|
|
// void printRotatedScaledSprite(sFrameHdr *_fh,int _xCentre,int _yCentre,int _xScale,int _yScale,int _rot,int _ot);
|
|
|
|
|
|
private:
|
|
class SpriteBankInstance *m_SpriteBankInstance;
|
|
|
|
};
|
|
|
|
#endif /* __GFX_SPRBANK_H__ */
|
|
|
|
/*===========================================================================
|
|
end */
|