NL3D::CTileBank Class Reference

#include <tile_bank.h>


Detailed Description

This class manage tile texture. It can load banktile description file (*.bank), and then gives access to land infos.
Author:
Cyril Corvazier

Nevrax France

Date:
2000

Definition at line 494 of file tile_bank.h.

Public Types

enum  TTileType { _128x128 = 0, _256x256, transition, undefined }

Public Member Functions

sint addLand (const std::string &name)
sint addTileSet (const std::string &name)
void cleanUnusedData ()
void clear ()
void computeXRef ()
 CTileBank ()
const std::string & getAbsPath () const
uint getDisplacementMap (const std::string &fileName)
const char * getDisplacementMap (uint noiseMap)
uint getDisplacementMapCount () const
CTileLandgetLand (int landIndex)
const CTileLandgetLand (int landIndex) const
sint getLandCount () const
sint getNumBitmap (CTile::TBitmap bitmap) const
CTilegetTile (int tileIndex)
const CTilegetTile (int tileIndex) const
sint getTileCount () const
CTileSetgetTileSet (int tileIndex)
const CTileSetgetTileSet (int tileIndex) const
sint getTileSetCount () const
void getTileXRef (int tile, int &tileSet, int &number, TTileType &type) const
void makeAllExtensionDDS ()
 This method change ".tga" of texture filename, to ".dds". Do this only for Additive and Diffuse part (not alpha).

void makeAllPathRelative ()
void postfixTileFilename (const char *filename)
 Postfix tile filename.

void postfixTileVegetableDesc (const char *filename)
 Postfix tile vegetable desc.

void removeDisplacementMap (uint mapId)
void removeLand (sint landIndex)
void removeTileSet (sint landIndex)
void serial (class NLMISC::IStream &f) throw (NLMISC::EStream)
void setAbsPath (const std::string &newPath)
void setDisplacementMap (uint noiseMap, const char *newName)
void xchgTileset (sint first, sint second)
Vegetable
CTileNoiseMapgetTileNoiseMap (uint tileNumber, uint tileSubNoise)
const CTileVegetableDescgetTileVegetableDesc (uint tileNumber) const
void initTileVegetableDescs (CVegetableManager *vegetableManager)
void loadTileVegetableDescs ()

Private Member Functions

sint createTile ()
void freeTile (int tileIndex)

Private Attributes

std::string _AbsPath
std::vector< CTileNoise_DisplacementMap
std::vector< CTileLand_LandVector
std::vector< CTileSet_TileSetVector
std::vector< CTile_TileVector
std::vector< CTileXRef_TileXRef

Static Private Attributes

const sint _Version = 4

Friends

class CTileSet


Member Enumeration Documentation

enum NL3D::CTileBank::TTileType
 

Enumeration values:
_128x128 
_256x256 
transition 
undefined 

Definition at line 498 of file tile_bank.h.


Constructor & Destructor Documentation

NL3D::CTileBank::CTileBank  ) 
 

Definition at line 90 of file tile_bank.cpp.

References _DisplacementMap.

00091 {
00092         // Default _DisplacementMap
00093         _DisplacementMap.resize (1);
00094 
00095         // Fill it with 0
00096         _DisplacementMap[0].setEmpty ();
00097 }


Member Function Documentation

sint NL3D::CTileBank::addLand const std::string &  name  ) 
 

Definition at line 172 of file tile_bank.cpp.

References _LandVector, and sint.

00173 {
00174         sint last=_LandVector.size();
00175         _LandVector.push_back(CTileLand());
00176         _LandVector[last].setName (name);
00177         return last;
00178 }

sint NL3D::CTileBank::addTileSet const std::string &  name  ) 
 

Definition at line 189 of file tile_bank.cpp.

References _TileSetVector, createTile(), CTileSet, and sint.

00190 {
00191         sint last=_TileSetVector.size();
00192         _TileSetVector.push_back(CTileSet());
00193         _TileSetVector[last].setName (name);
00194         for (int i=0; i<CTileSet::count; i++)
00195         {
00196                 _TileSetVector[last]._TileTransition[i]._Tile=createTile ();
00197         }
00198         return last;
00199 }

void NL3D::CTileBank::cleanUnusedData  ) 
 

Definition at line 429 of file tile_bank.cpp.

References _LandVector, _TileSetVector, and uint.

00430 {
00431         // Clean each tileset
00432         for (uint i=0; i<_TileSetVector.size(); i++)
00433         {
00434                 // Clean the tileset
00435                 _TileSetVector[i].cleanUnusedData ();
00436         }
00437 
00438         // Clear the land vector
00439         _LandVector.clear();
00440 }

void NL3D::CTileBank::clear  ) 
 

Definition at line 216 of file tile_bank.cpp.

References _AbsPath, _DisplacementMap, _LandVector, _TileSetVector, _TileVector, and _TileXRef.

Referenced by NL3D::CLandscapeUser::loadBankFiles().

00217 {
00218         _LandVector.clear ();
00219         _TileSetVector.clear ();
00220         _TileVector.clear ();
00221         _TileXRef.clear ();
00222         _DisplacementMap.clear ();
00223         _AbsPath.clear ();
00224 }

void NL3D::CTileBank::computeXRef  ) 
 

Definition at line 288 of file tile_bank.cpp.

References _128x128, _256x256, _TileSetVector, _TileVector, _TileXRef, NL3D::CTileSet::getNumTile128(), NL3D::CTileSet::getNumTile256(), NL3D::CTileSetTransition::getTile(), NL3D::CTileSet::getTile128(), NL3D::CTileSet::getTile256(), getTileSet(), NL3D::CTileSet::getTransition(), index, s, sint, t, and transition.

00289 {
00290         // Resize
00291         _TileXRef.resize (_TileVector.size());
00292 
00293         // Erase number of the tileset in xref
00294         for (int tile=0; tile<(sint)_TileVector.size(); tile++)
00295                 _TileXRef[tile]._XRefTileSet=-1;
00296 
00297         // Erase number of the tileset in xref
00298         for (int s=0; s<(sint)_TileSetVector.size(); s++)
00299         {
00300                 int t;
00301                 CTileSet *tileSet=getTileSet (s);
00302                 for (t=0; t<tileSet->getNumTile128(); t++)
00303                 {
00304                         int index=tileSet->getTile128 (t);
00305                         _TileXRef[index]._XRefTileSet=s;
00306                         _TileXRef[index]._XRefTileNumber=t;
00307                         _TileXRef[index]._XRefTileType=_128x128;
00308                 }
00309                 for (t=0; t<tileSet->getNumTile256(); t++)
00310                 {
00311                         int index=tileSet->getTile256 (t);
00312                         _TileXRef[index]._XRefTileSet=s;
00313                         _TileXRef[index]._XRefTileNumber=t;
00314                         _TileXRef[index]._XRefTileType=_256x256;
00315                 }
00316                 for (t=0; t<CTileSet::count; t++)
00317                 {
00318                         int index=tileSet->getTransition (t)->getTile();
00319                         _TileXRef[index]._XRefTileSet=s;
00320                         _TileXRef[index]._XRefTileNumber=t;
00321                         _TileXRef[index]._XRefTileType=transition;
00322                 }
00323         }
00324 }

sint NL3D::CTileBank::createTile  )  [private]
 

Definition at line 226 of file tile_bank.cpp.

References _TileVector, and sint.

Referenced by NL3D::CTileSet::addTile128(), NL3D::CTileSet::addTile256(), and addTileSet().

00227 {
00228         // Look for a free tile
00229         for (int i=0; i<(sint)_TileVector.size(); i++)
00230         {
00231                 if (_TileVector[i].isFree())
00232                 {
00233                         _TileVector[i].setFileName (CTile::diffuse, "");
00234                         _TileVector[i].setFileName (CTile::additive, "");
00235                         _TileVector[i].setFileName (CTile::alpha, "");
00236                         return i;
00237                 }
00238         }
00239 
00240         // Nothing free, add a tile at the end
00241         _TileVector.push_back (CTile());
00242         _TileVector[_TileVector.size()-1].setFileName (CTile::diffuse, "");
00243         _TileVector[_TileVector.size()-1].setFileName (CTile::additive, "");
00244         _TileVector[_TileVector.size()-1].setFileName (CTile::alpha, "");
00245         return _TileVector.size()-1;
00246 }

void NL3D::CTileBank::freeTile int  tileIndex  )  [private]
 

Definition at line 248 of file tile_bank.cpp.

References _TileVector, nlassert, and sint.

Referenced by NL3D::CTileSet::removeTile128(), NL3D::CTileSet::removeTile256(), and removeTileSet().

00249 {
00250         // Check args
00251         nlassert (tileIndex>=0);
00252         nlassert (tileIndex<(sint)_TileVector.size());
00253 
00254         // Free
00255         _TileVector[tileIndex].free();
00256 
00257         // Resize tile table
00258         int i;
00259         for (i=(sint)_TileVector.size()-1; i>=0; i--)
00260         {
00261                 if (!_TileVector[i].isFree ())
00262                         break;
00263         }
00264         if (i<(sint)_TileVector.size()-1)
00265                 _TileVector.resize (i+1);
00266 }

const std::string& NL3D::CTileBank::getAbsPath  )  const [inline]
 

Definition at line 619 of file tile_bank.h.

References _AbsPath.

Referenced by getTileNoiseMap(), and NL3D::CLandscape::loadTile().

00620         {
00621                 return _AbsPath;
00622         }

uint NL3D::CTileBank::getDisplacementMap const std::string &  fileName  ) 
 

Definition at line 597 of file tile_bank.cpp.

References _DisplacementMap, NLMISC::strlwr(), and uint.

00598 {
00599         // Lower string
00600         string lower=fileName;
00601         lower=strlwr (lower);
00602 
00603         // Look for this texture filename
00604         uint noiseTile;
00605         for (noiseTile=0; noiseTile<_DisplacementMap.size(); noiseTile++)
00606         {
00607                 // Same name ?
00608                 if (lower==_DisplacementMap[noiseTile]._FileName)
00609                         return noiseTile;
00610         }
00611 
00612         // Look for a free space
00613         for (noiseTile=0; noiseTile<_DisplacementMap.size(); noiseTile++)
00614         {
00615                 // Same name ?
00616                 if (_DisplacementMap[noiseTile]._FileName=="")
00617                         break;
00618         }
00619         if (noiseTile==_DisplacementMap.size())
00620         {
00621                 // Add a tile
00622                 _DisplacementMap.resize (noiseTile+1);
00623         }
00624 
00625         // Set the file name
00626         _DisplacementMap[noiseTile]._FileName=lower;
00627 
00628         return noiseTile;
00629 }

const char * NL3D::CTileBank::getDisplacementMap uint  noiseMap  ) 
 

Definition at line 631 of file tile_bank.cpp.

References _DisplacementMap, and uint.

Referenced by NL3D::CTileSet::setDisplacement().

00632 {
00633         return _DisplacementMap[noiseMap]._FileName.c_str();
00634 }

uint NL3D::CTileBank::getDisplacementMapCount  )  const
 

Definition at line 641 of file tile_bank.cpp.

References _DisplacementMap, and uint.

00642 {
00643         return _DisplacementMap.size();
00644 }

CTileLand* NL3D::CTileBank::getLand int  landIndex  )  [inline]
 

Definition at line 512 of file tile_bank.h.

References _LandVector.

00513         { 
00514                 return &_LandVector[landIndex]; 
00515         };

const CTileLand* NL3D::CTileBank::getLand int  landIndex  )  const [inline]
 

Definition at line 508 of file tile_bank.h.

References _LandVector.

00509         { 
00510                 return &_LandVector[landIndex]; 
00511         };

sint NL3D::CTileBank::getLandCount  )  const [inline]
 

Definition at line 504 of file tile_bank.h.

References _LandVector, and sint.

00505         { 
00506                 return _LandVector.size(); 
00507         };

sint NL3D::CTileBank::getNumBitmap CTile::TBitmap  bitmap  )  const
 

Definition at line 268 of file tile_bank.cpp.

References _TileVector, sint, and NLMISC::strlwr().

00269 {
00270         std::set<std::string> setString;
00271         for (int i=0; i<(sint)_TileVector.size(); i++)
00272         {
00273                 if (!_TileVector[i].isFree())
00274                 {
00275                         const std::string &str=_TileVector[i].getRelativeFileName (bitmap);
00276                         if (str!="")
00277                         {
00278                                 std::vector<char> vect (str.length()+1);
00279                                 memcpy (&*vect.begin(), str.c_str(), str.length()+1);
00280                                 NLMISC::strlwr (&*vect.begin());
00281                                 setString.insert (std::string (&*vect.begin()));
00282                         }
00283                 }
00284         }
00285         return setString.size();
00286 }

CTile* NL3D::CTileBank::getTile int  tileIndex  )  [inline]
 

Definition at line 536 of file tile_bank.h.

References _TileVector.

00537         { 
00538                 return &_TileVector[tileIndex]; 
00539         };

const CTile* NL3D::CTileBank::getTile int  tileIndex  )  const [inline]
 

Definition at line 532 of file tile_bank.h.

References _TileVector.

Referenced by NL3D::CTileSet::clearTile128(), NL3D::CTileSet::clearTile256(), NL3D::CTileSet::clearTransition(), NL3D::CTileSet::deleteBordersIfLast(), NL3D::CLandscape::loadTile(), NL3D::CTileSet::setTile128(), NL3D::CTileSet::setTile256(), NL3D::CTileSet::setTileTransition(), and NL3D::CTileSet::setTileTransitionAlpha().

00533         { 
00534                 return &_TileVector[tileIndex]; 
00535         };

sint NL3D::CTileBank::getTileCount  )  const [inline]
 

Definition at line 528 of file tile_bank.h.

References _TileVector, and sint.

Referenced by NL3D::CPatchInfo::getTileSymmetryRotate(), NL3D::CLandscape::initTileBanks(), NL3D::CLandscape::loadTile(), NL3D::CZoneSymmetrisation::propagateTileState(), and NL3D::CPatchInfo::transformTile().

00529         { 
00530                 return _TileVector.size(); 
00531         };

CTileNoiseMap * NL3D::CTileBank::getTileNoiseMap uint  tileNumber,
uint  tileSubNoise
 

Return the tilenoisemap pointer for this tile and subnoise tile

Definition at line 442 of file tile_bank.cpp.

References _DisplacementMap, NL3D::CTileNoise::_FileName, NL3D::CTileNoise::_TileNoiseMap, _TileSetVector, _TileVector, _TileXRef, NLMISC::CBitmap::convertToType(), NL3D::ITexture::generate(), getAbsPath(), NLMISC::CBitmap::getHeight(), NLMISC::CBitmap::getPixels(), NLMISC::CBitmap::getWidth(), NLMISC::CBitmap::loadGrayscaleAsAlpha(), NL3D_TILE_NOISE_MAP_SIZE, nlassert, nlwarning, NL3D::CTileNoiseMap::Pixels, sint8, uint, and uint8.

Referenced by NL3D::CPatch::computeDisplaceRawInteger().

00443 {
00444         if (_DisplacementMap.size() == 0)
00445         {
00446                 // it happens when serial a tile bank with version < 4
00447                 return NULL;
00448         }
00449 
00450         // Check tile number..
00451         if (tileNumber<_TileVector.size())
00452         {
00453                 // Get tileset number
00454                 uint tileSet=_TileXRef[tileNumber]._XRefTileSet;
00455 
00456                 // Checks
00457                 if (tileSet<_TileSetVector.size())
00458                 {
00459                         nlassert (tileSubNoise<CTileSet::CountDisplace);
00460                         //nlassert (_TileSetVector[tileSet]._DisplacementBitmap[tileSubNoise]<_DisplacementMap.size());
00461 
00462                         if (_TileSetVector[tileSet]._DisplacementBitmap[tileSubNoise]>=_DisplacementMap.size())
00463                                 return NULL;
00464 
00465                         // Return the tile noise map
00466                         CTileNoise &tileNoise=_DisplacementMap[_TileSetVector[tileSet]._DisplacementBitmap[tileSubNoise]];
00467 
00468                         // Not loaded ?
00469                         if (tileNoise._TileNoiseMap==NULL)
00470                         {
00471                                 // Load a bitmap
00472                                 CTextureFile texture (getAbsPath()+tileNoise._FileName);
00473                                 texture.loadGrayscaleAsAlpha (false);
00474                                 texture.generate ();
00475                                 texture.convertToType (CBitmap::Luminance);
00476 
00477                                 // Alloc
00478                                 tileNoise._TileNoiseMap=new CTileNoiseMap;
00479 
00480                                 // Good size ?
00481                                 if ((texture.getWidth ()==NL3D_TILE_NOISE_MAP_SIZE)&&(texture.getHeight()==NL3D_TILE_NOISE_MAP_SIZE))
00482                                 {
00483                                         // Copy
00484                                         memcpy (tileNoise._TileNoiseMap->Pixels, &texture.getPixels()[0], NL3D_TILE_NOISE_MAP_SIZE*NL3D_TILE_NOISE_MAP_SIZE);
00485 
00486                                         // Remap lumels
00487                                         for (uint i=0; i<NL3D_TILE_NOISE_MAP_SIZE*NL3D_TILE_NOISE_MAP_SIZE; i++)
00488                                         {
00489                                                 tileNoise._TileNoiseMap->Pixels[i]=(sint8)((uint8)tileNoise._TileNoiseMap->Pixels[i]-128);
00490                                                 if (tileNoise._TileNoiseMap->Pixels[i]==-128)
00491                                                         tileNoise._TileNoiseMap->Pixels[i]=-127;
00492                                         }
00493                                 }
00494                                 else
00495                                 {
00496                                         // This is not a normal behaviour.
00497                                         string  pathname= getAbsPath()+tileNoise._FileName;
00498                                         if( texture.getWidth ()==0 || texture.getHeight ()==0 )
00499                                                 nlwarning("TileNoiseMap not found: %s.", pathname.c_str());
00500                                         else
00501                                                 nlwarning("Bad TileNoiseMap size: %s.", pathname.c_str());
00502 
00503                                         // Not good size, copy a static map
00504                                         sint8 notGoodSizeForm[NL3D_TILE_NOISE_MAP_SIZE*NL3D_TILE_NOISE_MAP_SIZE]=
00505                                         {
00506                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00507                                                 00, 99, 99, 99, 99, 99, 99, 99, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00508                                                 00, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00509                                                 00, 99, 00, 99, 99, 99, 99, 99, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00510                                                 00, 99, 00, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00511                                                 00, 99, 00, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00512                                                 00, 99, 00, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00513                                                 00, 99, 00, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00514                                                 00, 99, 00, 99, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00515                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00516                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00517                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00518                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00519                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00520                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00521                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00522                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00523                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00524                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00525                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00526                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00527                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00528                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
00529                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 99, 00, 99, 00,
00530                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 99, 00, 99, 00,
00531                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 99, 00, 99, 00,
00532                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 99, 00, 99, 00,
00533                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 99, 00, 99, 00,
00534                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 99, 99, 99, 99, 99, 99, 00, 99, 00,
00535                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 99, 00,
00536                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 99, 99, 99, 99, 99, 99, 99, 99, 00,
00537                                                 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00
00538                                         };
00539 
00540                                         // Copy
00541                                         memcpy (tileNoise._TileNoiseMap->Pixels, notGoodSizeForm, NL3D_TILE_NOISE_MAP_SIZE*NL3D_TILE_NOISE_MAP_SIZE);
00542                                 }
00543                         }
00544 
00545                         // Return the noise map
00546                         return tileNoise._TileNoiseMap;
00547                 }
00548         }
00549 
00550         if (_DisplacementMap.size()==0 || _DisplacementMap[0]._TileNoiseMap)
00551                 return NULL;
00552 
00553         // Checks
00554         nlassert (_DisplacementMap[0]._TileNoiseMap);
00555         return _DisplacementMap[0]._TileNoiseMap;
00556 }

CTileSet* NL3D::CTileBank::getTileSet int  tileIndex  )  [inline]
 

Definition at line 524 of file tile_bank.h.

References _TileSetVector.

00525         { 
00526                 return &_TileSetVector[tileIndex]; 
00527         };

const CTileSet* NL3D::CTileBank::getTileSet int  tileIndex  )  const [inline]
 

Definition at line 520 of file tile_bank.h.

References _TileSetVector.

Referenced by computeXRef(), NL3D::CLandscapeUser::flushTiles(), NL3D::CVisualCollisionEntity::getSurfaceInfo(), NL3D::CPatchInfo::getTileSymmetryRotate(), NL3D::CLandscape::initTileBanks(), NL3D::CZoneSymmetrisation::propagateTileState(), NL3D::CZoneSymmetrisation::setOrientedTileState(), NL3D::CZoneSymmetrisation::setTileState(), and NL3D::CPatchInfo::transformTile().

00521         { 
00522                 return &_TileSetVector[tileIndex]; 
00523         };

sint NL3D::CTileBank::getTileSetCount  )  const [inline]
 

Definition at line 516 of file tile_bank.h.

References _TileSetVector, and sint.

Referenced by NL3D::CLandscapeUser::flushTiles(), NL3D::CPatchInfo::getTileSymmetryRotate(), NL3D::CLandscape::initTileBanks(), NL3D::CZoneSymmetrisation::propagateTileState(), NL3D::CZoneSymmetrisation::setOrientedTileState(), and NL3D::CZoneSymmetrisation::setTileState().

00517         { 
00518                 return _TileSetVector.size(); 
00519         };

const CTileVegetableDesc & NL3D::CTileBank::getTileVegetableDesc uint  tileNumber  )  const
 

return the TileVegetable desc for this tile

Definition at line 648 of file tile_bank.cpp.

References _TileSetVector, _TileVector, _TileXRef, and uint.

Referenced by NL3D::CLandscape::getTileVegetableDesc().

00649 {
00650         // Check tile number..
00651         if (tileNumber<_TileVector.size())
00652         {
00653                 // Get tileset number
00654                 uint tileSet=_TileXRef[tileNumber]._XRefTileSet;
00655 
00656                 // Checks
00657                 if (tileSet<_TileSetVector.size())
00658                 {
00659                         return _TileSetVector[tileSet].getTileVegetableDesc();
00660                 }
00661 
00662         }
00663 
00664         // if fails for any reason, return an empty tileVegetableDesc;
00665         static  CTileVegetableDesc      emptyTvd;
00666         return emptyTvd;
00667 }

void NL3D::CTileBank::getTileXRef int  tile,
int &  tileSet,
int &  number,
TTileType type
const [inline]
 

Return the xref for a tile.

Parameters:
tile is the tile number.
tileSet will receive the tile set number in which the tile is. -1 if the tile is not used.
number will receive the number of the tile in the tileset.
type is the type of tile.

Definition at line 560 of file tile_bank.h.

References _TileXRef, nlassert, sint, and type.

Referenced by NL3D::CVisualCollisionEntity::getSurfaceInfo(), NL3D::CPatchInfo::getTileSymmetryRotate(), NL3D::CZoneSymmetrisation::propagateTileState(), NL3D::CZoneSymmetrisation::setOrientedTileState(), NL3D::CZoneSymmetrisation::setTileState(), and NL3D::CPatchInfo::transformTile().

00561         {
00562                 nlassert (tile>=0);
00563                 nlassert (tile<(sint)_TileXRef.size());
00564                 tileSet=_TileXRef[tile]._XRefTileSet;
00565                 number=_TileXRef[tile]._XRefTileNumber;
00566                 type=_TileXRef[tile]._XRefTileType;
00567         }

void NL3D::CTileBank::initTileVegetableDescs CVegetableManager vegetableManager  ) 
 

register all CVegetable to the Manager. called by CLandscape::initTileBanks()

Definition at line 685 of file tile_bank.cpp.

References _TileSetVector, NL3D::CTileVegetableDesc::registerToManager(), and uint.

Referenced by NL3D::CLandscape::enableVegetable(), and NL3D::CLandscape::initTileBanks().

00686 {
00687         // For all tileSets.
00688         uint tileSet;
00689         
00690         for(tileSet=0; tileSet<_TileSetVector.size(); tileSet++)
00691         {
00692                 CTileVegetableDesc      &tvd= _TileSetVector[tileSet].getTileVegetableDesc();
00693                 tvd.registerToManager(vegetableManager);
00694         }
00695 }

void NL3D::CTileBank::loadTileVegetableDescs  ) 
 

you should call this method, after serialising the TileBank, and before CLandscape::initTileBanks() You must call CLandscape::initTileBanks() after calling this method for each tileSet call CTileSet::loadTileVegetableDesc()

Definition at line 671 of file tile_bank.cpp.

References _TileSetVector, and uint.

Referenced by NL3D::CLandscapeUser::flushTiles().

00672 {
00673         // For all tileSets.
00674         uint tileSet;
00675         
00676         for(tileSet=0; tileSet<_TileSetVector.size(); tileSet++)
00677         {
00678                 // load their fileName
00679                 _TileSetVector[tileSet].loadTileVegetableDesc();
00680         }
00681 }

void NL3D::CTileBank::makeAllExtensionDDS  ) 
 

This method change ".tga" of texture filename, to ".dds". Do this only for Additive and Diffuse part (not alpha).

Definition at line 390 of file tile_bank.cpp.

References _TileVector, sint, and uint32.

Referenced by NL3D::CLandscapeUser::loadBankFiles().

00391 {
00392         // For all tiles
00393         for (sint nTile=0; nTile<(sint)_TileVector.size(); nTile++)
00394         {
00395                 string          tmp;
00396                 uint32          pos;
00397 
00398                 // Diffuse
00399                 tmp= _TileVector[nTile].getRelativeFileName (CTile::diffuse);
00400                 pos= tmp.rfind(".tga");
00401                 if(pos!= string::npos)
00402                 {
00403                         tmp.replace(pos, 4, ".dds");
00404                         _TileVector[nTile].setFileName (CTile::diffuse, tmp);
00405                 }
00406 
00407                 // Additive.
00408                 tmp= _TileVector[nTile].getRelativeFileName (CTile::additive);
00409                 pos= tmp.rfind(".tga");
00410                 if(pos!= string::npos)
00411                 {
00412                         tmp.replace(pos, 4, ".dds");
00413                         _TileVector[nTile].setFileName (CTile::additive, tmp);
00414                 }
00415 
00416                 // Alpha.
00417                 tmp= _TileVector[nTile].getRelativeFileName (CTile::alpha);
00418                 pos= tmp.rfind(".tga");
00419                 if(pos!= string::npos)
00420                 {
00421                         tmp.replace(pos, 4, ".dds");
00422                         _TileVector[nTile].setFileName (CTile::alpha, tmp);
00423                 }
00424 
00425         }
00426 
00427 }

void NL3D::CTileBank::makeAllPathRelative  ) 
 

Definition at line 355 of file tile_bank.cpp.

References _DisplacementMap, _TileVector, sint, NL3D::TroncFileName(), and uint.

Referenced by NL3D::CLandscapeUser::loadBankFiles().

00356 {
00357         // For all tiles
00358         for (sint nTile=0; nTile<(sint)_TileVector.size(); nTile++)
00359         {
00360                 // Tronc filename
00361                 char sTmpFileName[512];
00362 
00363                 // Diffuse
00364                 TroncFileName (sTmpFileName, _TileVector[nTile].getRelativeFileName (CTile::diffuse).c_str());
00365                 _TileVector[nTile].setFileName (CTile::diffuse, sTmpFileName);
00366 
00367                 // Additive
00368                 TroncFileName (sTmpFileName, _TileVector[nTile].getRelativeFileName (CTile::additive).c_str());
00369                 _TileVector[nTile].setFileName (CTile::additive, sTmpFileName);
00370 
00371                 // Alpha
00372                 TroncFileName (sTmpFileName, _TileVector[nTile].getRelativeFileName (CTile::alpha).c_str());
00373                 _TileVector[nTile].setFileName (CTile::alpha, sTmpFileName);
00374         }
00375 
00376         // For all displaces
00377         for (uint i=0; i<_DisplacementMap.size(); i++)
00378         {
00379                 // Tronc filename
00380                 char sTmpFileName[512];
00381 
00382                 TroncFileName (sTmpFileName, _DisplacementMap[i]._FileName.c_str());
00383                 _DisplacementMap[i]._FileName = sTmpFileName;
00384         }
00385 }

void NL3D::CTileBank::postfixTileFilename const char *  filename  ) 
 

Postfix tile filename.

Definition at line 699 of file tile_bank.cpp.

References _TileVector, and uint.

Referenced by NL3D::CLandscapeUser::postfixTileFilename().

00700 {
00701         // For each tiles
00702         uint tile;
00703         for (tile=0; tile<_TileVector.size (); tile++)
00704         {       
00705                 // For each bitmap
00706                 uint bitmap;
00707                 for (bitmap=0; bitmap<CTile::bitmapCount; bitmap++)
00708                 {
00709                         string &filename = _TileVector[tile]._BitmapName[bitmap];
00710                         if (!filename.empty())
00711                         {
00712                                 string ext = CFile::getExtension(filename);
00713                                 string name = CFile::getFilenameWithoutExtension(filename);
00714                                 filename = CFile::getPath (filename);
00715                                 filename += name;
00716                                 filename += postfix;
00717                                 filename += ".";
00718                                 filename += ext;
00719                         }
00720                 }
00721         }
00722 }

void NL3D::CTileBank::postfixTileVegetableDesc const char *  filename  ) 
 

Postfix tile vegetable desc.

Definition at line 726 of file tile_bank.cpp.

References _TileSetVector, and uint.

Referenced by NL3D::CLandscapeUser::postfixTileVegetableDesc().

00727 {
00728         // For each tiles
00729         uint tileSet;
00730         for (tileSet=0; tileSet<_TileSetVector.size (); tileSet++)
00731         {       
00732                 string &filename = _TileSetVector[tileSet]._TileVegetableDescFileName;
00733                 if (!filename.empty())
00734                 {
00735                         string ext = CFile::getExtension(filename);
00736                         string name = CFile::getFilenameWithoutExtension(filename);
00737                         filename = CFile::getPath (filename);
00738                         filename += name;
00739                         filename += postfix;
00740                         filename += ".";
00741                         filename += ext;
00742                 }
00743         }
00744 }

void NL3D::CTileBank::removeDisplacementMap uint  mapId  ) 
 

Definition at line 558 of file tile_bank.cpp.

References _DisplacementMap, _TileSetVector, nlassert, and uint.

Referenced by NL3D::CTileSet::clearDisplacement(), and NL3D::CTileSet::setDisplacement().

00559 {
00560         // Checks
00561         nlassert (mapId<_DisplacementMap.size());
00562 
00563         if (mapId!=0)
00564         {
00565                 // Check if another tileSet uses it
00566                 uint tileSet;
00567                 for (tileSet=0; tileSet<_TileSetVector.size(); tileSet++)
00568                 {
00569                         // It uses it ?
00570                         uint tile;
00571                         for (tile=0; tile<CTileSet::CountDisplace; tile++)
00572                         {
00573                                 // The same ?
00574                                 if (_TileSetVector[tileSet]._DisplacementBitmap[tile]==mapId)
00575                                         // Stop
00576                                         break;
00577                         }
00578                         if (tile!=CTileSet::CountDisplace)
00579                                 break;
00580                 }
00581                 if (tileSet==_TileSetVector.size())
00582                 {
00583                         // Remove it
00584                         _DisplacementMap[mapId].reset();
00585                         
00586                         // Last element ?
00587                         if (mapId==_DisplacementMap.size()-1)
00588                         {
00589                                 // Resize the array ?
00590                                 while ((mapId>0)&&(_DisplacementMap[mapId]._FileName==""))
00591                                         _DisplacementMap.resize (mapId--);
00592                         }
00593                 }
00594         }
00595 }

void NL3D::CTileBank::removeLand sint  landIndex  ) 
 

Definition at line 180 of file tile_bank.cpp.

References _LandVector, nlassert, and sint.

00181 {
00182         // Check args
00183         nlassert (landIndex>=0);
00184         nlassert (landIndex<(sint)_LandVector.size());
00185 
00186         _LandVector.erase (_LandVector.begin ()+landIndex);
00187 }

void NL3D::CTileBank::removeTileSet sint  landIndex  ) 
 

Definition at line 201 of file tile_bank.cpp.

References _TileSetVector, freeTile(), index, nlassert, and sint.

00202 {
00203         // Check args
00204         nlassert (setIndex>=0);
00205         nlassert (setIndex<(sint)_TileSetVector.size());
00206 
00207         for (int i=0; i<CTileSet::count; i++)
00208         {
00209                 int index=_TileSetVector[setIndex]._TileTransition[i]._Tile;
00210                 if (index!=-1)
00211                         freeTile (index);
00212         }
00213         _TileSetVector.erase (_TileSetVector.begin ()+setIndex);
00214 }

void NL3D::CTileBank::serial class NLMISC::IStream f  )  throw (NLMISC::EStream)
 

Definition at line 99 of file tile_bank.cpp.

References nlassert, sint, type, and uint.

Referenced by NL3D::CLandscapeUser::loadBankFiles().

00100 {
00101         f.serialCheck (std::string ("BANK"));
00102 
00103         sint streamver = f.serialVersion(_Version);
00104         
00105         // Version 1 not compatible
00106         if (f.isReading())
00107         {
00108                 if (streamver<2)
00109                         throw EOlderStream(f);
00110         }
00111 
00112         switch (streamver)
00113         {
00114         case 4:
00115                 // Displacement map array
00116                 f.serialCont (_DisplacementMap);
00117                 if (f.isReading())
00118                 {
00119                         // Checks
00120                         nlassert (_DisplacementMap.size()>0);
00121 
00122                         // Set first empty
00123                         _DisplacementMap[0].setEmpty ();
00124                 }
00125         case 3:
00126                 // Absolute path
00127                 f.serial (_AbsPath);
00128         case 2:
00129                 // Serial all containers
00130                 f.serialCont (_LandVector);
00131                 f.serialCont (_TileSetVector);
00132                 f.serialCont (_TileVector);
00133         }
00134 
00135         // Compute XRef in read mode
00136         if (f.isReading())
00137                 computeXRef ();
00138 
00139         // If Version<=2, remove diffuse and alpha tiles in transitions
00140         if (streamver<=2)
00141         {
00142                 // Must be reading
00143                 nlassert (f.isReading());
00144 
00145                 // Reset _AbsPath
00146                 _AbsPath="";
00147 
00148                 // Remove diffuse and additive in transition
00149                 uint tileCount=(uint)getTileCount ();
00150                 for (uint i=0; i<tileCount; i++)
00151                 {
00152                         int tileSet;
00153                         int number;
00154                         TTileType type;
00155 
00156                         // Get xref
00157                         getTileXRef (i, tileSet, number, type);
00158 
00159                         // Transition ?
00160                         if (type==transition)
00161                         {
00162                                 // Remove diffuse bitmap
00163                                 getTileSet(tileSet)->clearTransition ((CTileSet::TTransition)number, CTile::diffuse, *this);
00164                                 
00165                                 // Remove alpha bitmap
00166                                 getTileSet(tileSet)->clearTransition ((CTileSet::TTransition)number, CTile::alpha, *this);
00167                         }
00168                 }
00169         }
00170 }

void NL3D::CTileBank::setAbsPath const std::string &  newPath  )  [inline]
 

Definition at line 615 of file tile_bank.h.

References _AbsPath.

Referenced by NL3D::CLandscapeUser::loadBankFiles().

00616         {
00617                 _AbsPath=newPath;
00618         }

void NL3D::CTileBank::setDisplacementMap uint  noiseMap,
const char *  newName
 

Definition at line 636 of file tile_bank.cpp.

References _DisplacementMap, and uint.

00637 {
00638         _DisplacementMap[noiseMap]._FileName=newName;
00639 }

void NL3D::CTileBank::xchgTileset sint  first,
sint  second
 

Definition at line 326 of file tile_bank.cpp.

References _TileSetVector, nlassert, and sint.

00327 {
00328         // Some check
00329         nlassert ((firstTileSet>=0)&&(firstTileSet<(sint)_TileSetVector.size()));
00330         nlassert ((secondTileSet>=0)&&(secondTileSet<(sint)_TileSetVector.size()));
00331 
00332         // Xchange the sets
00333         CTileSet tmp=_TileSetVector[firstTileSet];
00334         _TileSetVector[firstTileSet]=_TileSetVector[secondTileSet];
00335         _TileSetVector[secondTileSet]=tmp;
00336 }


Friends And Related Function Documentation

friend class CTileSet [friend]
 

Definition at line 496 of file tile_bank.h.

Referenced by addTileSet().


Field Documentation

std::string NL3D::CTileBank::_AbsPath [private]
 

Definition at line 656 of file tile_bank.h.

Referenced by clear(), getAbsPath(), and setAbsPath().

std::vector<CTileNoise> NL3D::CTileBank::_DisplacementMap [private]
 

Definition at line 655 of file tile_bank.h.

Referenced by clear(), CTileBank(), getDisplacementMap(), getDisplacementMapCount(), getTileNoiseMap(), makeAllPathRelative(), removeDisplacementMap(), and setDisplacementMap().

std::vector<CTileLand> NL3D::CTileBank::_LandVector [private]
 

Definition at line 651 of file tile_bank.h.

Referenced by addLand(), cleanUnusedData(), clear(), getLand(), getLandCount(), and removeLand().

std::vector<CTileSet> NL3D::CTileBank::_TileSetVector [private]
 

Definition at line 652 of file tile_bank.h.

Referenced by addTileSet(), cleanUnusedData(), clear(), computeXRef(), getTileNoiseMap(), getTileSet(), getTileSetCount(), getTileVegetableDesc(), initTileVegetableDescs(), loadTileVegetableDescs(), postfixTileVegetableDesc(), removeDisplacementMap(), removeTileSet(), and xchgTileset().

std::vector<CTile> NL3D::CTileBank::_TileVector [private]
 

Definition at line 653 of file tile_bank.h.

Referenced by clear(), computeXRef(), createTile(), freeTile(), getNumBitmap(), getTile(), getTileCount(), getTileNoiseMap(), getTileVegetableDesc(), makeAllExtensionDDS(), makeAllPathRelative(), and postfixTileFilename().

std::vector<CTileXRef> NL3D::CTileBank::_TileXRef [private]
 

Definition at line 654 of file tile_bank.h.

Referenced by clear(), computeXRef(), getTileNoiseMap(), getTileVegetableDesc(), and getTileXRef().

const sint NL3D::CTileBank::_Version = 4 [static, private]
 

Definition at line 88 of file tile_bank.cpp.


The documentation for this class was generated from the following files:
Generated on Tue Mar 16 08:04:08 2004 for NeL by doxygen 1.3.6