/**************/ /*** Export ***/ /**************/ #include "stdafx.h" #include #include "LayerTile.h" #include "Map.h" #include "utils.h" #include "Core.h" #include "TexCache.h" #include "TileSet.h" #include "Elem.h" #include "Layer.h" #include "LayerTile.h" #include "Export.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ CExport::CExport(char *Filename) { File=fopen(Filename,"wb"); // Write Dummy File Header fwrite(&FileHdr,sizeof(sExpFileHdr),1,File); // Add blank tile sExpTile BlankElem={0,0,0,0,0,0,0}; AddTile(BlankElem); } /*****************************************************************************/ CExport::~CExport() { int LayerCount=LayerOfs.size(); FileHdr.LayerCount=LayerCount; for (int i=0;iGetTileBank(); //!! FileHdr.TileW=TileBank->GetTile(0,0).GetElemWidth(); //!! FileHdr.TileH=TileBank->GetTile(0,0).GetElemHeight(); FileHdr.TileW=16; FileHdr.TileH=16; // Write Tiles ListSize=UsedTileList.size(); FileHdr.TileCount=ListSize; FileHdr.TileOfs=ftell(File); for (i=0; iGetTileBank(); if (OutTile.Set==0 && OutTile.Tile==0) { char c=0; fwrite(&OutTile,sizeof(sExpTile),1,File); fwrite(&c,1,16*16*3,File); // Write RGB } else { CElem &ThisTile=TileBank->GetElem(OutTile.Set,OutTile.Tile); GString SetName=TileBank->GetSetFilename(OutTile.Set); ASSERT(ThisTile.GetElemWidth()==FileHdr.TileW); ASSERT(ThisTile.GetElemHeight()==FileHdr.TileH); if (ThisTile.IsElem3d()) { ExportTile3d(Core,ThisTile,OutTile); } OutTile.Set=SetNames.Add(SetName); fwrite(&OutTile,sizeof(sExpTile),1,File); fwrite(ThisTile.GetElemRGB(),FileHdr.TileW*FileHdr.TileH*3,1,File); // Write RGB } } /*****************************************************************************/ void CExport::ExportTile3d(CCore *Core,CElem &ThisTile,sExpTile &OutTile) { ExportElem3d(Core,ThisTile,OutTile.TriStart,OutTile.TriCount); } /*****************************************************************************/ void CExport::ExportElem3d(CCore *Core,CElem &ThisTile,int &TriStart,int &TriCount) { CTexCache &TexCache=Core->GetTexCache(); std::vector &TileTriList=ThisTile.GetTriList(); TriStart=TriList.size(); TriCount=TileTriList.size(); for (int T=0; T