SBSPSS/Utils/MkLevel/MkLevel.h

133 lines
3.4 KiB
C
Raw Normal View History

2001-04-17 18:42:07 +02:00
/*************************/
/*** Base Level Holder ***/
/*************************/
#ifndef __MKLEVEL_HEADER__
#define __MKLEVEL_HEADER__
#include <vector>
#include <List.h>
#include <FaceStore.h>
#include "IniClass.h"
// Map Editor header files
#include "..\mapedit\LayerDef.h"
#include "..\mapedit\ExportHdr.h"
using namespace std;
//***************************************************************************
struct sMkLevelTex
{
int Set;
int XOfs,YOfs;
u8 *RGB;
int Flags;
int RChk,GChk,BChk;
int TexID;
bool operator ==(sMkLevelTex const &v1)
{
if (Set!=v1.Set) return(false);
if (XOfs!=v1.XOfs) return(false);
if (YOfs!=v1.YOfs) return(false);
if (Flags!=v1.Flags) return(false);
return(true);
}
};
//***************************************************************************
class CMkLevelLayer;
class CMkLevel
{
public:
CMkLevel();
~CMkLevel();
2001-04-19 17:12:21 +02:00
void SetAppDir(const char *Path);
void Init(const char *InFilename,const char *OutFilename,int TPBase,int TPW,int TPH);
2001-04-17 18:42:07 +02:00
void Load();
void Process();
int AddTile3d(sExpLayerTile &Tile) {return(Tile3dList.Add(Tile));}
int AddTile2d(sExpLayerTile &Tile) {return(Tile2dList.Add(Tile));}
void Write();
int Create2dTex(sExpLayerTile &ThisTile);
int Create3dTile(sExpLayerTile &ThisTile);
int FindRGBMatch(sMkLevelTex &ThisTex);
bool IsRGBSame(const sMkLevelTex &Tile0,const sMkLevelTex &Tile1);
void MakeTexName(sMkLevelTex &InTex,GString &OutStr);
int BuildTileTex(sMkLevelTex &InTex);
char *GetConfigStr(const char *Grp,const char *Key) {return(Config.GetStr(Grp,Key));}
2001-04-19 17:12:21 +02:00
CIni &GetConfig() {return(Config);}
2001-04-17 18:42:07 +02:00
CTexGrab &GetTexGrab() {return(TexGrab);}
2001-04-19 17:12:21 +02:00
void SetStart(int X,int Y) {LevelHdr.PlayerStartX=X; LevelHdr.PlayerStartY=Y;}
2001-04-17 18:42:07 +02:00
protected:
CMkLevelLayer *FindLayer(int Type,int SubType);
void LoadStrList(CList<GString> &List,char *TexPtr,int Count);
void LoadTiles(sExpFileHdr *FileHdr);
void LoadLayers(sExpFileHdr *FileHdr);
void LoadLayer(sExpLayerHdr *LayerHdr);
void PreProcessLayers();
void ProcessTileBanks();
void PreProcessTileBank2d();
void ProcessTileBank2d();
void PreProcessTileBank3d();
void ProcessTileBank3d();
void ProcessLayers();
void SetUpTileUV(sTile2d &Out, sTexOutInfo &Info);
void WriteLevel();
void WriteLayers();
int WriteLayer(int Type,int SubType,const char *LayerName);
int WriteThings(int Type,const char *LayerName);
int WriteTriList();
int WriteQuadList();
2001-04-19 17:12:21 +02:00
int WriteVtxList();
2001-04-17 18:42:07 +02:00
void WriteTileBank();
void BuildTiles();
FILE *File;
GString InFilename,InPath,LevelName;
2001-04-19 17:12:21 +02:00
GString OutName;
GString AppDir;
2001-04-17 18:42:07 +02:00
int TileW,TileH;
CIni Config;
CList<sExpTri> InTriList;
CList<sExpTile> InTileList;
CList<GString> InSetNameList;
CList<GString> InTexNameList;
CList<GString> UsedSetNameList;
CList<GString> UsedTexNameList;
2001-04-19 17:12:21 +02:00
CFaceStore OutFaceList;
2001-04-17 18:42:07 +02:00
CList<sTile2d> OutTile2dList;
CList<sTile3d> OutTile3dList;
CList<sExpLayerTile> Tile2dList;
CList<sExpLayerTile> Tile3dList;
CList<sMkLevelTex> Tex2dList;
CTexGrab TexGrab;
CList<Frame> BmpList;
vector<CMkLevelLayer*> LayerList;
2001-04-19 17:12:21 +02:00
sLevelHdr LevelHdr;
// sTileBankHdr TileBankHdr;
sExpTri FlatFace[2];
2001-04-17 18:42:07 +02:00
};
//***************************************************************************
#endif