NL3D::CTileBorder Class Reference

#include <tile_bank.h>


Detailed Description

This class is a tile set. It handles all the tile of the same material.
Author:
Cyril Corvazier

Nevrax France

Date:
2000

Definition at line 224 of file tile_bank.h.

Public Types

enum  TBorder {
  top = 0, bottom, left, right,
  borderCount
}

Public Member Functions

 CTileBorder ()
void doubleSize ()
void get (int &width, int &height, std::vector< NLMISC::CBGRA > &array) const
sint32 getHeight () const
sint32 getWidth () const
bool isSet () const
void operator= (const CTileBorder &border)
bool operator== (const CTileBorder &border) const
void reset ()
void rotate ()
void serial (NLMISC::IStream &f) throw (NLMISC::EStream)
void set (int width, int height, const std::vector< NLMISC::CBGRA > &array)

Static Public Member Functions

bool allAlphaSet (const CTileBorder &border, TBorder where, int &pixel, int &composante)
bool compare (const CTileBorder &border1, const CTileBorder &border2, TBorder where1, TBorder where2, int &pixel, int &composante)

Private Attributes

std::vector< NLMISC::CBGRA_Borders [borderCount]
sint32 _Height
bool _Set
sint32 _Width

Static Private Attributes

const sint _Version = 0


Member Enumeration Documentation

enum NL3D::CTileBorder::TBorder
 

Enumeration values:
top 
bottom 
left 
right 
borderCount 

Definition at line 227 of file tile_bank.h.

00227 { top=0, bottom, left, right, borderCount };


Constructor & Destructor Documentation

NL3D::CTileBorder::CTileBorder  )  [inline]
 

Definition at line 228 of file tile_bank.h.

References reset().

00229         {
00230                 reset();
00231         }


Member Function Documentation

bool NL3D::CTileBorder::allAlphaSet const CTileBorder border,
TBorder  where,
int &  pixel,
int &  composante
[static]
 

Definition at line 1731 of file tile_bank.cpp.

References border, and nlassert.

01732 {
01733         // Check border is initialized
01734         nlassert (border.isSet());
01735 
01736         // always Alpha
01737         composante=3;
01738 
01739         for (pixel=0; pixel<(int)border._Borders[where].size(); pixel++)
01740         {
01741                 if (border._Borders[where][pixel].A!=0xff)
01742                         return false;
01743         }
01744 
01745         return true;
01746 }

bool NL3D::CTileBorder::compare const CTileBorder border1,
const CTileBorder border2,
TBorder  where1,
TBorder  where2,
int &  pixel,
int &  composante
[static]
 

Definition at line 1696 of file tile_bank.cpp.

References _Borders, isSet(), and nlassert.

01697 {
01698         // Check border is initialized
01699         nlassert (border1.isSet());
01700         nlassert (border2.isSet());
01701 
01702         if (border1._Borders[where1].size()!=border2._Borders[where2].size())
01703                 return false;
01704         for (pixel=0; pixel<(int)border1._Borders[where1].size(); pixel++)
01705         {
01706                 if (border1._Borders[where1][pixel].R!=border2._Borders[where2][pixel].R)
01707                 {
01708                         composante=0;
01709                         return false;
01710                 }
01711                 else if (border1._Borders[where1][pixel].G!=border2._Borders[where2][pixel].G)
01712                 {
01713                         composante=1;
01714                         return false;
01715                 }
01716                 else if (border1._Borders[where1][pixel].B!=border2._Borders[where2][pixel].B)
01717                 {
01718                         composante=2;
01719                         return false;
01720                 }
01721                 else if (border1._Borders[where1][pixel].A!=border2._Borders[where2][pixel].A)
01722                 {
01723                         composante=3;
01724                         return false;
01725                 }
01726         }
01727 
01728         return true;
01729 }

void NL3D::CTileBorder::doubleSize  ) 
 

Definition at line 1765 of file tile_bank.cpp.

References _Borders, bottom, left, right, top, and w.

Referenced by NL3D::CTileSet::checkTile256(), and NL3D::CTileSet::setBorder().

01766 {
01767         _Borders[top].resize (_Width*2);
01768         _Borders[bottom].resize (_Width*2);
01769         _Borders[left].resize (_Height*2);
01770         _Borders[right].resize (_Height*2);
01771 
01772         for (int w=0; w<_Width; w++)
01773         {
01774                 _Borders[top][w+_Width]=_Borders[top][w];
01775                 _Borders[bottom][w+_Width]=_Borders[bottom][w];
01776         }
01777         for (int h=0; h<_Height; h++)
01778         {
01779                 _Borders[left][h+_Height]=_Borders[left][h];
01780                 _Borders[right][h+_Height]=_Borders[right][h];
01781         }
01782 }

void NL3D::CTileBorder::get int &  width,
int &  height,
std::vector< NLMISC::CBGRA > &  array
const
 

Definition at line 1649 of file tile_bank.cpp.

References _Borders, _Set, bottom, height, left, nlassert, right, size, top, uint, w, and width.

01650 {
01651         // Go
01652         if (_Set)
01653         {
01654                 width=_Width;
01655                 height=_Height;
01656                 array.resize (0);
01657                 array.resize (_Width*_Height);
01658                 nlassert (_Borders[bottom].size()==(uint)_Width);
01659                 nlassert (_Borders[top].size()==(uint)_Width);
01660                 nlassert (_Borders[left].size()==(uint)_Height);
01661                 nlassert (_Borders[right].size()==(uint)_Height);
01662 
01663                 // Fill
01664                 CBGRA black(0,0,0);
01665                 for (int p=0; p<_Width*_Height; p++)
01666                 {
01667                         array[p]=black;
01668                 }
01669 
01670                 // Last line
01671                 int lastLine=(_Height-1)*_Width;
01672                 int lastCol=(_Width-1);
01673 
01674                 // Copy top/bottom border
01675                 for (int w=0; w<_Width; w++)
01676                 {
01677                         array[w]=_Borders[top][w];
01678                         array[w+lastLine]=_Borders[bottom][w];
01679                 }
01680 
01681                 // Copy left/right border
01682                 for (int h=0; h<_Height; h++)
01683                 {
01684                         array[h*_Width]=_Borders[left][h];
01685                         array[h*_Width+lastCol]=_Borders[right][h];
01686                 }
01687         }
01688         else
01689         {
01690                 width=0;
01691                 height=0;
01692                 array.resize (0);
01693         }
01694 }

sint32 NL3D::CTileBorder::getHeight  )  const [inline]
 

Definition at line 254 of file tile_bank.h.

References sint32.

00255         {
00256                 return _Height;
00257         }

sint32 NL3D::CTileBorder::getWidth  )  const [inline]
 

Definition at line 250 of file tile_bank.h.

References sint32.

00251         {
00252                 return _Width;
00253         }

bool NL3D::CTileBorder::isSet  )  const [inline]
 

Definition at line 238 of file tile_bank.h.

References _Set.

Referenced by NL3D::CTileSet::checkTile128(), NL3D::CTileSet::checkTile256(), compare(), and NL3D::CTileSet::getExistingTransitionTile().

00239         {
00240                 return _Set;
00241         }

void NL3D::CTileBorder::operator= const CTileBorder border  ) 
 

Definition at line 1753 of file tile_bank.cpp.

References _Borders, _Set, border, bottom, left, right, and top.

01754 {
01755         _Set=border._Set;
01756         _Width=border._Width;
01757         _Height=border._Width;
01758         _Borders[top]=border._Borders[top];
01759         _Borders[bottom]=border._Borders[bottom];
01760         _Borders[left]=border._Borders[left];
01761         _Borders[right]=border._Borders[right];
01762 }

bool NL3D::CTileBorder::operator== const CTileBorder border  )  const
 

Definition at line 1748 of file tile_bank.cpp.

References _Borders, and border.

01749 {
01750         return (_Width==border._Width) && (_Height==border._Height) && (_Borders==border._Borders);
01751 }

void NL3D::CTileBorder::reset void   )  [inline]
 

Definition at line 242 of file tile_bank.h.

References _Borders, _Set, bottom, left, right, and top.

Referenced by NL3D::CTileSet::cleanUnusedData(), NL3D::CTileSet::clearTransition(), CTileBorder(), and NL3D::CTileSet::deleteBordersIfLast().

00243         {
00244                 _Set=false;
00245                 _Borders[top].clear();
00246                 _Borders[bottom].clear();
00247                 _Borders[left].clear();
00248                 _Borders[right].clear();
00249         }

void NL3D::CTileBorder::rotate  ) 
 

Definition at line 1784 of file tile_bank.cpp.

References _Borders, bottom, left, right, sint32, size, top, and uint.

01785 {
01786         // Copy the right
01787         std::vector<NLMISC::CBGRA> tmpLeft=_Borders[left];
01788 
01789         // Top inverted becomes left
01790         uint i, size;
01791         size=_Borders[top].size();
01792         _Borders[left].resize (size);
01793 
01794         // copy inverted
01795         for (i=0; i<size; i++)
01796                 _Borders[left][i]=_Borders[top][size-i-1];
01797 
01798         // Right become top
01799         _Borders[top]=_Borders[right];
01800 
01801         // bottom inverted becomes right
01802         size=_Borders[bottom].size();
01803         _Borders[right].resize (size);
01804 
01805         // copy inverted
01806         for (i=0; i<size; i++)
01807                 _Borders[right][i]=_Borders[bottom][size-i-1];
01808 
01809         // Left become bottom
01810         _Borders[bottom]=tmpLeft;
01811 
01812         // Invert size
01813         sint32 tmpSize=_Width;
01814         _Width=_Height;
01815         _Height=tmpSize;
01816 }

void NL3D::CTileBorder::serial NLMISC::IStream f  )  throw (NLMISC::EStream)
 

Definition at line 1599 of file tile_bank.cpp.

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

01600 {
01601         (void)f.serialVersion(_Version);
01602 
01603         f.serial (_Set);
01604         f.serial (_Width);
01605         f.serial (_Height);
01606         f.serialCont (_Borders[top]);
01607         f.serialCont (_Borders[bottom]);
01608         f.serialCont (_Borders[left]);
01609         f.serialCont (_Borders[right]);
01610 }

void NL3D::CTileBorder::set int  width,
int  height,
const std::vector< NLMISC::CBGRA > &  array
 

Definition at line 1612 of file tile_bank.cpp.

References _Borders, _Set, bottom, height, left, nlassert, right, sint, top, w, and width.

01613 {
01614         // Check array size
01615         nlassert (width>0);
01616         nlassert (height>0);
01617         nlassert ((sint)array.size()==width*height);
01618 
01619         // Copy size
01620         _Width=width;
01621         _Height=height;
01622 
01623         // Last line
01624         int lastLine=(_Height-1)*width;
01625         int lastCol=(_Width-1);
01626         _Borders[top].resize (_Width);
01627         _Borders[bottom].resize (_Width);
01628         _Borders[left].resize (_Height);
01629         _Borders[right].resize (_Height);
01630 
01631         // Copy top/bottom border
01632         for (int w=0; w<_Width; w++)
01633         {
01634                 _Borders[top][w]=array[w];
01635                 _Borders[bottom][w]=array[w+lastLine];
01636         }
01637 
01638         // Copy left/right border
01639         for (int h=0; h<_Height; h++)
01640         {
01641                 _Borders[left][h]=array[h*_Width];
01642                 _Borders[right][h]=array[h*_Width+lastCol];
01643         }
01644 
01645         // Set
01646         _Set=true;
01647 }


Field Documentation

std::vector<NLMISC::CBGRA> NL3D::CTileBorder::_Borders[borderCount] [private]
 

Definition at line 267 of file tile_bank.h.

Referenced by compare(), doubleSize(), get(), operator=(), operator==(), reset(), rotate(), and set().

sint32 NL3D::CTileBorder::_Height [private]
 

Definition at line 266 of file tile_bank.h.

bool NL3D::CTileBorder::_Set [private]
 

Definition at line 264 of file tile_bank.h.

Referenced by get(), isSet(), operator=(), reset(), and set().

const sint NL3D::CTileBorder::_Version = 0 [static, private]
 

Definition at line 1597 of file tile_bank.cpp.

sint32 NL3D::CTileBorder::_Width [private]
 

Definition at line 265 of file tile_bank.h.


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