This commit is contained in:
parent
7551b4f12e
commit
8788076d39
37 changed files with 11186 additions and 0 deletions
270
Utils/Libs/GinLib/animheader.cpp
Normal file
270
Utils/Libs/GinLib/animheader.cpp
Normal file
|
@ -0,0 +1,270 @@
|
|||
/*=========================================================================
|
||||
|
||||
ANIMHEADER.CPP
|
||||
|
||||
Author: Gary Liddon @
|
||||
Created:
|
||||
Project:
|
||||
Purpose:
|
||||
|
||||
Copyright (c) 1998 G R Liddon
|
||||
|
||||
===========================================================================*/
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Includes
|
||||
-------- */
|
||||
|
||||
/* Std Lib
|
||||
------- */
|
||||
#include <strstream>
|
||||
|
||||
/* Glib
|
||||
---- */
|
||||
#include <pcre.h>
|
||||
#include <gobject.hpp>
|
||||
|
||||
/* Local
|
||||
----- */
|
||||
#include "animheader.h"
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Tyepdefs && Defines
|
||||
------------------- */
|
||||
using namespace std;
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Structure defintions
|
||||
-------------------- */
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function Prototypes
|
||||
------------------- */
|
||||
static int GetHex(char const * Str);
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Vars
|
||||
---- */
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Data
|
||||
---- */
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
int GetHex(char const * Str)
|
||||
{
|
||||
char Buffer[1024];
|
||||
strcpy(Buffer,Str);
|
||||
|
||||
strstream i(Buffer,1024);
|
||||
|
||||
int Val;
|
||||
|
||||
i>>hex>>Val;
|
||||
return(Val);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
|
||||
void MakeAnimHeader( char * line, AnimHeaderItem * item )
|
||||
{
|
||||
int len;
|
||||
int pos;
|
||||
char anim[1024];
|
||||
char animno[8];
|
||||
|
||||
pos = 0;
|
||||
len = strlen( line );
|
||||
|
||||
if (len > 4)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
// FIND ANIM
|
||||
while(count != 3)
|
||||
{
|
||||
while(line[pos] != '_')
|
||||
{
|
||||
pos++;
|
||||
if (pos >= len)
|
||||
{
|
||||
GObject::Error(ERR_FATAL,"Header scan overrun line - %s\n", line);
|
||||
}
|
||||
}
|
||||
pos++;
|
||||
count++;
|
||||
}
|
||||
|
||||
// GET ANIM NAME
|
||||
count = 0;
|
||||
while(line[pos] != ' ')
|
||||
{
|
||||
anim[count++] = line[pos++];
|
||||
if (pos > len)
|
||||
{
|
||||
GObject::Error(ERR_FATAL,"Header scan overrun line - %s\n", line);
|
||||
}
|
||||
}
|
||||
anim[count] = 0;
|
||||
|
||||
// GET ANIM NUMBER
|
||||
pos += 3;
|
||||
count = 0;
|
||||
while(line[pos] != ',')
|
||||
{
|
||||
animno[count++] = line[pos++];
|
||||
if (pos > len)
|
||||
{
|
||||
GObject::Error(ERR_FATAL,"Header scan overrun line - %s\n", line);
|
||||
}
|
||||
}
|
||||
animno[count] = 0;
|
||||
|
||||
strupr( anim );
|
||||
item->m_AnimName = anim;
|
||||
item->m_Frame = atoi( animno );
|
||||
}
|
||||
else
|
||||
{
|
||||
GObject::Error(ERR_FATAL,"Incorrect header line - %s\n", line);
|
||||
}
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void readAnimHeaderFile(char const * Name, std::vector<AnimHeaderItem> & Items)
|
||||
{
|
||||
char Line[1024];
|
||||
|
||||
try
|
||||
{
|
||||
ifstream InStream;
|
||||
|
||||
InStream.open(Name,ios::in);
|
||||
|
||||
if (InStream)
|
||||
{
|
||||
InStream.getline(Line,1024); // HEADER GUARD
|
||||
InStream.getline(Line,1024); // HEADER GUARD
|
||||
InStream.getline(Line,1024); // ENUM
|
||||
InStream.getline(Line,1024); // {
|
||||
InStream.getline(Line,1024); // ANIM COUNT
|
||||
|
||||
while (!InStream.eof() && Line[0] != '}')
|
||||
{
|
||||
InStream.getline(Line,1024);
|
||||
|
||||
if (strlen(Line) && Line[0] != '}')
|
||||
{
|
||||
AnimHeaderItem MyItem;
|
||||
|
||||
MakeAnimHeader( Line, &MyItem );
|
||||
|
||||
InStream.getline(Line,1024); // NUMBER OF FRAMES
|
||||
|
||||
Items.push_back( MyItem );
|
||||
}
|
||||
}
|
||||
InStream.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw("Error opening anim header file");
|
||||
}
|
||||
}
|
||||
|
||||
catch (char const * E)
|
||||
{
|
||||
GObject::Error(ERR_FATAL,"Error in AddToTexList : %s",E);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void AnimHeaderFile::load(char const * name)
|
||||
{
|
||||
vector<AnimHeaderItem> items;
|
||||
|
||||
readAnimHeaderFile(name,items);
|
||||
|
||||
int numOfItems;
|
||||
|
||||
numOfItems=items.size();
|
||||
|
||||
for (int f=0;f<numOfItems;f++)
|
||||
{
|
||||
AnimHeaderItem dummyResult;
|
||||
|
||||
// if (find(items[f].m_texName,dummyResult))
|
||||
// GObject::Error(ERR_FATAL,"%s already defined in anim header file database",(char const *)items[f].m_texName);
|
||||
|
||||
// makeTexNameCompliant(items[f].m_texName);
|
||||
|
||||
// m_strToInfo[items[f].m_texName]=items[f];
|
||||
}
|
||||
|
||||
m_lastLoadedFile=name;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void AnimHeaderFile::makeTexNameCompliant(GString & str)
|
||||
{
|
||||
str.Lower();
|
||||
str.Filter("\\",'/');
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
bool AnimHeaderFile::find(GString const & str,AnimHeaderItem & result)
|
||||
{
|
||||
GString srchStr;
|
||||
map<GString,AnimHeaderItem>::iterator it;
|
||||
|
||||
srchStr=str;
|
||||
|
||||
makeTexNameCompliant(srchStr);
|
||||
|
||||
it=m_strToInfo.find(srchStr);
|
||||
|
||||
if (it == m_strToInfo.end())
|
||||
{
|
||||
return(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
result=m_strToInfo[srchStr];
|
||||
return(true);
|
||||
}
|
||||
}
|
||||
|
||||
/*===========================================================================
|
||||
end */
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue