This commit is contained in:
Daveo 2001-06-13 18:32:53 +00:00
parent e26b5acfd3
commit 777155f9c9
5 changed files with 63 additions and 30 deletions

View File

@ -33,7 +33,7 @@ CAnimTex::~CAnimTex()
}
/*****************************************************************************/
void CAnimTex::AddAnimTex(sFrameHdr *Frame,FileEquate Filename)
void CAnimTex::AddAnimTex(sFrameHdr *Frame,int FrameNo,FileEquate Filename)
{
int TPageX,TPageY,X,Y,W,H;
CAnimTex *ThisTex=new ("CAnimTex::AddAnimTex") CAnimTex;
@ -79,6 +79,8 @@ CAnimTex *ThisTex=new ("CAnimTex::AddAnimTex") CAnimTex;
ThisTex->TPage=Frame->TPage;
ThisTex->TexName=Filename;
ThisTex->FrameNo=FrameNo;
int Size=W*H;
ThisTex->TexData=(u32*)MemAlloc(Size*sizeof(u16), "AnTx");
DrawSync(0);
@ -148,6 +150,26 @@ int Time = GameState::getFramesSinceLast();
}
}
/*****************************************************************************/
void CAnimTex::SetSpeed(FileEquate TexName,int Frm,int Speed)
{
CAnimTex *ThisTex;
ThisTex=AnimTexList;
while(ThisTex)
{
if (ThisTex->TexName==TexName && ThisTex->FrameNo==Frm)
{
ThisTex->Speed=Speed;
return;
}
ThisTex=ThisTex->NextTex;
}
ASSERT(!"CAnimTex::SetSpeed - Frame not Found");
}
/*****************************************************************************/
/*****************************************************************************/
/*** Pak Tex Stuff ***********************************************************/

View File

@ -15,10 +15,11 @@ public:
CAnimTex();
~CAnimTex();
static void AddAnimTex(sFrameHdr *Frame,FileEquate Filename);
static void AddAnimTex(sFrameHdr *Frame,int Frame,FileEquate Filename);
static void AnimateTex();
static void GetTexData();
static void DumpThisTPage(FileEquate TexName);
static void SetSpeed(FileEquate Filename,int Frm,int Speed);
private:
CAnimTex *NextTex;
@ -27,6 +28,7 @@ private:
s16 PixPerWord;
u32 *TexData;
FileEquate TexName;
int FrameNo;
u8 TPage;
};

View File

@ -26,13 +26,19 @@ MAX_TPAGES = 32,
const int TPRawW=64;
const int TPRawH=256;
struct sAnimTexInfo
{
int Frame;
sFrameHdr FrameHdr;
};
struct sTPageInfo
{
s16 RefCount;
FileEquate TPageName;
s16 XOfs,YOfs;
u16 AnimTexCount;
sFrameHdr AnimTexFrame[TPAGE_MAX_ANIM_TEX];
s16 RefCount;
FileEquate TPageName;
s16 XOfs,YOfs;
u16 AnimTexCount;
sAnimTexInfo AnimTexFrame[TPAGE_MAX_ANIM_TEX];
};
struct sTPageCache
@ -167,23 +173,23 @@ RECT Rect;
}
/*****************************************************************************/
void AddAnimTexToList(sTPageInfo *Cache,sFrameHdr *FramePtr,int TPage,int Half)
void AddAnimTexToList(sTPageInfo *Cache,sFrameHdr *FramePtr,int Frm,int TPage,int Half)
{
sFrameHdr *AT=&Cache->AnimTexFrame[Cache->AnimTexCount];
MCmemcpy(AT,FramePtr,sizeof(sFrameHdr));
MCmemcpy(&Cache->AnimTexFrame[Cache->AnimTexCount].FrameHdr,FramePtr,sizeof(sFrameHdr));
Cache->AnimTexFrame[Cache->AnimTexCount].Frame=Frm;
Cache->AnimTexCount++;
}
/*****************************************************************************/
TPAGE_DESC TPLoadTex(FileEquate Filename)
{
TPAGE_DESC Desc;
sTPageHdr *TPHdr;
sFrameHdr *FramePtr;
u32 *VRAMData;
int TPage,Half;
sTPageInfo *Cache;
TPAGE_DESC Desc;
sTPageHdr *TPHdr;
sFrameHdr *FramePtr;
u32 *VRAMData;
int TPage,Half;
sTPageInfo *Cache;
// Is it already loaded in TCache?
IsTPageInCache(Filename,TPage,Half);
@ -193,7 +199,6 @@ sTPageInfo *Cache;
// DBG_MSG2("TPLoadTex Cached (%i,%i)",TPage,Half);
s_TPCache[TPage].Info[Half].RefCount++;
Cache=&s_TPCache[TPage].Info[Half];
FramePtr=&Cache->AnimTexFrame[0];
}
else
{ // Better load it then
@ -205,7 +210,8 @@ sTPageInfo *Cache;
Cache=FindSpareTPage(Filename,TPage,Half,TPHdr);
for (int Frm=0;Frm<TPHdr->NoOfFrames; Frm++) // Add Animated Texture references
{
if (FramePtr->Cycle) AddAnimTexToList(Cache,FramePtr++,TPage,Half);
if (FramePtr->Cycle) AddAnimTexToList(Cache,FramePtr,Frm,TPage,Half);
FramePtr++;
}
TPLoadVRam(TPHdr, TPage,Half,VRAMData);
MemFree(TPHdr);
@ -213,8 +219,8 @@ sTPageInfo *Cache;
// If first instance, add animated textures
if (Cache->RefCount==1)
{
FramePtr=Cache->AnimTexFrame;
for (int Frm=0; Frm<Cache->AnimTexCount; Frm++) CAnimTex::AddAnimTex(FramePtr++,Filename);
sAnimTexInfo *ATexPtr=Cache->AnimTexFrame;
for (int Frm=0; Frm<Cache->AnimTexCount; Frm++) CAnimTex::AddAnimTex(&ATexPtr[Frm].FrameHdr,ATexPtr[Frm].Frame,Filename);
}
Desc.Half= Half;
@ -281,7 +287,7 @@ int ReadLeft;
FramePtr=*hdrs;
for (int Frm=0;Frm<TPHdr.NoOfFrames; Frm++) // Add Animated Texture references
{
if (FramePtr->Cycle) AddAnimTexToList(Cache,FramePtr++,TPage,Half);
if (FramePtr->Cycle) AddAnimTexToList(Cache,FramePtr++,Frm,TPage,Half);
}
Cache->RefCount=1;
@ -295,8 +301,8 @@ int ReadLeft;
// If first instance, add animated textures
if (Cache->RefCount==1)
{
FramePtr=Cache->AnimTexFrame;
for (int Frm=0; Frm<Cache->AnimTexCount; Frm++) CAnimTex::AddAnimTex(FramePtr++,Filename);
sAnimTexInfo *ATexPtr=Cache->AnimTexFrame;
for (int Frm=0; Frm<Cache->AnimTexCount; Frm++) CAnimTex::AddAnimTex(&ATexPtr[Frm].FrameHdr,ATexPtr[Frm].Frame,Filename);
}
Desc.Half= Half;

View File

@ -13,16 +13,17 @@
/*****************************************************************************/
extern VECTOR upVec;
extern const s16 ACosTable[4097];
//extern const s16 ACosTable[4097];
extern const s16 SinTable[1024];
extern const s32 OneSinTable[1024];
//extern const s32 OneSinTable[1024];
/*****************************************************************************/
/*
inline s32 macos(const s32 &a)
{
return(ACosTable[a>>1]);
}
*/
/*****************************************************************************/
inline s32 msin(const s32 &a)
@ -66,7 +67,7 @@ inline s32 mcos(const s32 &a)
}
/*****************************************************************************/
/*
inline s32 monesin(const s32 &a)
{
if (a>3071)
@ -85,7 +86,7 @@ inline s32 monesin(const s32 &a)
return(OneSinTable[a]);
}
}
*/
/*****************************************************************************/
/*
#define msin(x) rsin((x))

View File

@ -7,6 +7,7 @@
VECTOR upVec = { 0, ONE, 0, 0 };
/*****************************************************************************/
/*
s16 ACosTable[4097] = {
2047 ,2027 ,2019 ,2012 ,2007 ,2002 ,1998 ,1994 ,1990 ,1986 ,1983 ,1980 ,1977 ,1974 ,1971 ,1969 ,
1966 ,1963 ,1961 ,1959 ,1956 ,1954 ,1952 ,1950 ,1948 ,1946 ,1944 ,1942 ,1940 ,1938 ,1936 ,1934 ,
@ -265,7 +266,7 @@ s16 ACosTable[4097] = {
115 ,113 ,111 ,109 ,107 ,105 ,103 ,101 ,99 ,97 ,95 ,93 ,91 ,88 ,86 ,84 ,
81 ,78 ,76 ,73 ,70 ,67 ,64 ,61 ,57 ,53 ,49 ,45 ,40 ,35 ,28 ,20 ,
0 };
*/
s16 SinTable[1024] = {
0 ,6 ,12 ,18 ,25 ,31 ,37 ,43 ,50 ,56 ,62 ,69 ,75 ,81 ,87 ,94 ,
@ -333,7 +334,7 @@ s16 SinTable[1024] = {
4091 ,4091 ,4091 ,4091 ,4092 ,4092 ,4092 ,4092 ,4093 ,4093 ,4093 ,4093 ,4094 ,4094 ,4094 ,4094 ,
4094 ,4094 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 };
/*
s32 OneSinTable[1024] = {
0 ,2670177 ,1335090 ,890062 ,667548 ,534040 ,445035 ,381461 ,333780 ,296695 ,267028 ,242754 ,222527 ,205411 ,190741 ,178027 ,
166902 ,157087 ,148362 ,140555 ,133529 ,127173 ,121394 ,116118 ,111282 ,106833 ,102726 ,98923 ,95392 ,92105 ,89037 ,86167 ,
@ -401,3 +402,4 @@ s32 OneSinTable[1024] = {
4097 ,4097 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 };
*/