From 3e3572c3ab21a939b7c918d484a37402be1c88ce Mon Sep 17 00:00:00 2001 From: dfighter1985 Date: Tue, 5 Aug 2014 02:58:31 +0200 Subject: [PATCH] Tile loading more or less works. TODO: investigate why displacement map lookup causes crashes. --- code/nel/include/nel/3d/tile_bank.h | 5 + code/studio/src/plugins/tile_editor/land.h | 31 ---- .../src/plugins/tile_editor/tile_bank.cpp | 142 ++++++++++++++++++ .../src/plugins/tile_editor/tile_bank.h | 10 ++ .../tile_editor/tile_editor_main_window.cpp | 26 ++-- .../src/plugins/tile_editor/tile_images.h | 23 +++ .../src/plugins/tile_editor/tile_item.cpp | 8 + .../src/plugins/tile_editor/tile_item.h | 1 + .../src/plugins/tile_editor/tile_model.cpp | 128 +++++++++++++++- .../src/plugins/tile_editor/tile_model.h | 16 +- .../plugins/tile_editor/tilebank_loader.cpp | 16 +- .../src/plugins/tile_editor/tilebank_loader.h | 6 +- .../plugins/tile_editor/tilebank_saver.cpp | 9 -- .../src/plugins/tile_editor/tilebank_saver.h | 3 +- 14 files changed, 342 insertions(+), 82 deletions(-) delete mode 100644 code/studio/src/plugins/tile_editor/land.h create mode 100644 code/studio/src/plugins/tile_editor/tile_images.h diff --git a/code/nel/include/nel/3d/tile_bank.h b/code/nel/include/nel/3d/tile_bank.h index 89b8e2272..00e0f2cae 100644 --- a/code/nel/include/nel/3d/tile_bank.h +++ b/code/nel/include/nel/3d/tile_bank.h @@ -86,6 +86,11 @@ public: _BitmapName[bitmapType]=name; } + std::string getFileName (TBitmap bitmapType) const + { + return _BitmapName[bitmapType]; + } + /// Get the additional orientation (CCW) for alpha texture. uint8 getRotAlpha () { diff --git a/code/studio/src/plugins/tile_editor/land.h b/code/studio/src/plugins/tile_editor/land.h deleted file mode 100644 index 93d244d9d..000000000 --- a/code/studio/src/plugins/tile_editor/land.h +++ /dev/null @@ -1,31 +0,0 @@ -// Ryzom Core Studio - Tile Editor plugin -// Copyright (C) 2010 Winch Gate Property Limited -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - - -#ifndef LAND_H -#define LAND_H - -#include - -struct Land -{ - QString name; - QStringList tilesets; -}; - - -#endif - diff --git a/code/studio/src/plugins/tile_editor/tile_bank.cpp b/code/studio/src/plugins/tile_editor/tile_bank.cpp index 62fcb3565..3a7b34ca8 100644 --- a/code/studio/src/plugins/tile_editor/tile_bank.cpp +++ b/code/studio/src/plugins/tile_editor/tile_bank.cpp @@ -229,6 +229,16 @@ void TileBank::renameTileSet( int idx, const QString &newName ) } +void TileBank::getTileSets( QStringList &l ) +{ + int c = m_pvt->m_bank.getTileSetCount(); + for( int i = 0; i < c; i++ ) + { + NL3D::CTileSet *set = m_pvt->m_bank.getTileSet( i ); + l.push_back( set->getName().c_str() ); + } +} + void TileBank::addLand( const QString &name ) { m_pvt->m_bank.addLand( name.toUtf8().constData() ); @@ -239,6 +249,18 @@ void TileBank::removeLand( int idx ) m_pvt->m_bank.removeLand( idx ); } +void TileBank::getLands( QStringList &l ) +{ + l.clear(); + + int c = m_pvt->m_bank.getLandCount(); + for( int i = 0; i < c; i++ ) + { + NL3D::CTileLand *land = m_pvt->m_bank.getLand( i ); + l.push_back( land->getName().c_str() ); + } +} + void TileBank::setLandSets( int idx, const QStringList &l ) { NL3D::CTileLand *land = m_pvt->m_bank.getLand( idx ); @@ -392,6 +414,126 @@ void TileBank::clearImage( int ts, int type, int tile, TileConstants::TTileChann } +int TileBank::getTileCount( int tileSet, TileConstants::TNodeTileType type ) +{ + NL3D::CTileSet *set = m_pvt->m_bank.getTileSet( tileSet ); + if( set == NULL ) + return -1; + + int c = 0; + + switch( type ) + { + case TileConstants::Tile128: + c = set->getNumTile128(); + break; + + case TileConstants::Tile256: + c = set->getNumTile256(); + break; + + case TileConstants::TileTransition: + c = NL3D::CTileSet::count; + break; + + case TileConstants::TileDisplacement: + c = NL3D::CTileSet::CountDisplace; + break; + } + + return c; +} + +int TileBank::getRealTileId( int tileSet, TileConstants::TNodeTileType type, int tileIdInSet ) +{ + NL3D::CTileSet *set = m_pvt->m_bank.getTileSet( tileSet ); + if( set == NULL ) + return -1; + + int tile = -1; + + switch( type ) + { + case TileConstants::Tile128: + tile = set->getTile128( tileIdInSet ); + break; + + case TileConstants::Tile256: + tile = set->getTile256( tileIdInSet ); + break; + + case TileConstants::TileTransition: + tile = set->getTransition( tileIdInSet )->getTile(); + break; + + case TileConstants::TileDisplacement: + tile = set->getDisplacementTile( NL3D::CTileSet::TDisplacement( tileIdInSet ) ); + break; + } + + return tile; +} + +void TileBank::getTileImages( int tileSet, TileConstants::TNodeTileType type, int tileId, TileImages &images ) +{ + NL3D::CTileSet *set = m_pvt->m_bank.getTileSet( tileSet ); + if( set == NULL ) + return; + + switch( type ) + { + case TileConstants::Tile128: + case TileConstants::Tile256: + case TileConstants::TileTransition: + { + NL3D::CTile *t = m_pvt->m_bank.getTile( tileId ); + if( t == NULL ) + return; + + images.diffuse = t->getFileName( channelToTBitmap( TileConstants::TileDiffuse ) ).c_str(); + images.additive = t->getFileName( channelToTBitmap( TileConstants::TileAdditive ) ).c_str(); + images.alpha = t->getFileName( channelToTBitmap( TileConstants::TileAlpha ) ).c_str(); + } + break; + + case TileConstants::TileDisplacement: + { + images.diffuse = m_pvt->m_bank.getDisplacementMap( tileId ); + } + break; + } + +} + +void TileBank::getTileImages( int tileSet, TileConstants::TNodeTileType type, QList< TileImages > &l ) +{ + l.clear(); + + NL3D::CTileSet *set = m_pvt->m_bank.getTileSet( tileSet ); + if( set == NULL ) + return; + + int c = getTileCount( tileSet, type ); + + TileImages images; + + for( int i = 0; i < c; i++ ) + { + images.clear(); + + int id = getRealTileId( tileSet, type, i ); + if( id < 0 ) + { + l.push_back( images ); + continue; + } + + getTileImages( tileSet, type, id, images ); + + l.push_back( images ); + } + +} void TileBank::setVegetation( int tileSet, const QString &vegetation ) { diff --git a/code/studio/src/plugins/tile_editor/tile_bank.h b/code/studio/src/plugins/tile_editor/tile_bank.h index d267486a8..e420fac9c 100644 --- a/code/studio/src/plugins/tile_editor/tile_bank.h +++ b/code/studio/src/plugins/tile_editor/tile_bank.h @@ -4,8 +4,10 @@ #include #include #include +#include #include "tile_constants.h" +#include "tile_images.h" namespace NLMISC { @@ -23,9 +25,11 @@ public: void addTileSet( const QString &name ); void removeTileSet( int idx ); void renameTileSet( int idx, const QString &newName ); + void getTileSets( QStringList &l ); void addLand( const QString &name ); void removeLand( int idx ); + void getLands( QStringList &l ); void setLandSets( int idx, const QStringList &l ); void getLandSets( int idx, QStringList &l ); @@ -35,6 +39,12 @@ public: void replaceImage( int ts, int type, int tile, TileConstants::TTileChannel channel, const QString &name, const QVariant &pixmap ); void clearImage( int ts, int type, int tile, TileConstants::TTileChannel channel ); + + int getTileCount( int tileSet, TileConstants::TNodeTileType type ); + int getRealTileId( int tileSet, TileConstants::TNodeTileType type, int tileIdInSet ); + void getTileImages( int tileSet, TileConstants::TNodeTileType type, int tileId, TileImages &images ); + void getTileImages( int tileSet, TileConstants::TNodeTileType type, QList< TileImages > &l ); + void setVegetation( int tileSet, const QString &vegetation ); QString getVegetation( int tileSet ) const; diff --git a/code/studio/src/plugins/tile_editor/tile_editor_main_window.cpp b/code/studio/src/plugins/tile_editor/tile_editor_main_window.cpp index ed8c1ae54..86953f6a7 100644 --- a/code/studio/src/plugins/tile_editor/tile_editor_main_window.cpp +++ b/code/studio/src/plugins/tile_editor/tile_editor_main_window.cpp @@ -271,8 +271,7 @@ void TileEditorMainWindow::open() return; TileBankLoader loader; - bool b = true; - //loader.load( fn.toUtf8().constData(), m_tileModel, m_lands ); + bool b = loader.load( fn.toUtf8().constData(), m_tileModel ); if( !b ) { @@ -374,7 +373,7 @@ void TileEditorMainWindow::onTileSetAdd() } // Create and append the new tile set to the model. - TileSetNode *tileSet = model->createTileSetNode(text); + m_tileModel->addTileSet( text ); // Retrieve how many rows there currently are and set the current index using that. uint32 rows = model->rowCount(); @@ -684,8 +683,6 @@ void TileEditorMainWindow::onActionAddTile(int tabId) QString selectedFilter; QStringList fileNames = QFileDialog::getOpenFileNames(this, "Choose Tile Texture", "." , "Images (*.png);;All Files (*.*)", &selectedFilter, options); - int c = n->childCount(); - TileConstants::TNodeTileType type = tabToType( tabId ); QStringListIterator itr( fileNames ); @@ -693,8 +690,9 @@ void TileEditorMainWindow::onActionAddTile(int tabId) while( itr.hasNext() ) { - TileItemNode *newNode = m_tileModel->createItemNode( setId, type, c, TileConstants::TileDiffuse, itr.next() ); - if( newNode == NULL ) + bool b = m_tileModel->addTile( setId, type, itr.next(), TileConstants::TileDiffuse ); + + if( !b ) { if( m_tileModel->hasError() ) error = m_tileModel->getLastError(); @@ -708,9 +706,7 @@ void TileEditorMainWindow::onActionAddTile(int tabId) else continue; } - - n->appendRow( newNode ); - c++; + } QModelIndex rootIdx = m_tileModel->index( tabId, 0, m_ui->tileSetLV->currentIndex()); @@ -809,7 +805,15 @@ void TileEditorMainWindow::onActionReplaceImage( int tabId ) void TileEditorMainWindow::onTileBankLoaded() { m_ui->landLW->clear(); - // load lands + QStringList lands; + m_tileModel->getLands( lands ); + QStringListIterator itr( lands ); + while( itr.hasNext() ) + { + m_ui->landLW->addItem( itr.next() ); + } + + m_tileModel->onTBLoaded(); m_ui->listView128->reset(); m_ui->listView256->reset(); diff --git a/code/studio/src/plugins/tile_editor/tile_images.h b/code/studio/src/plugins/tile_editor/tile_images.h new file mode 100644 index 000000000..699fe3f11 --- /dev/null +++ b/code/studio/src/plugins/tile_editor/tile_images.h @@ -0,0 +1,23 @@ +#ifndef TILE_IMAGES_H +#define TILE_IMAGES_H + +#include + +struct TileImages +{ + QString diffuse; + QString additive; + QString alpha; + + void clear() + { + diffuse.clear(); + additive.clear(); + alpha.clear(); + } +}; + + + +#endif + diff --git a/code/studio/src/plugins/tile_editor/tile_item.cpp b/code/studio/src/plugins/tile_editor/tile_item.cpp index 7c10ef9dc..cba20ce2d 100644 --- a/code/studio/src/plugins/tile_editor/tile_item.cpp +++ b/code/studio/src/plugins/tile_editor/tile_item.cpp @@ -312,6 +312,14 @@ TileItemNode::TileItemNode( TileConstants::TNodeTileType type, int tileId, TileC setTileFilename( channel, filename ); } +TileItemNode::TileItemNode( TileConstants::TNodeTileType type, int tileId, Node *parent ) +{ + m_id = tileId; + m_parentItem = parent; + pvt = new TileItemNodePvt(); + m_hasError = false; +} + TileItemNode::~TileItemNode() { delete pvt; diff --git a/code/studio/src/plugins/tile_editor/tile_item.h b/code/studio/src/plugins/tile_editor/tile_item.h index 8df33361b..08de0ec1f 100644 --- a/code/studio/src/plugins/tile_editor/tile_item.h +++ b/code/studio/src/plugins/tile_editor/tile_item.h @@ -107,6 +107,7 @@ class TileItemNode : public Node { public: TileItemNode( TileConstants::TNodeTileType type, int tileId, TileConstants::TTileChannel channel, QString filename, Node *parent=0); + TileItemNode( TileConstants::TNodeTileType type, int tileId, Node *parent=0); virtual ~TileItemNode(); QVariant data(int column, int role) const; int columnCount() const; diff --git a/code/studio/src/plugins/tile_editor/tile_model.cpp b/code/studio/src/plugins/tile_editor/tile_model.cpp index 4b14f54fb..d9e9b7ef3 100644 --- a/code/studio/src/plugins/tile_editor/tile_model.cpp +++ b/code/studio/src/plugins/tile_editor/tile_model.cpp @@ -218,16 +218,10 @@ TileSetNode *TileModel::createTileSetNode(QString tileSetName) // Append them in the correct order to the tile set. this->appendRow(tileSet); - m_tileBank->addTileSet(tileSetName); - + return tileSet; } -TileItemNode *TileModel::createItemNode( TileConstants::TNodeTileType type, int id, TileConstants::TTileChannel channel, const QString &fileName ) -{ - return new TileItemNode( type, id, channel, fileName ); -} - TileItemNode *TileModel::createItemNode( int idx, TileConstants::TNodeTileType type, int id, TileConstants::TTileChannel channel, const QString &fileName ) { TileItemNode *n = new TileItemNode( type, id, channel, fileName ); @@ -305,6 +299,12 @@ void TileModel::clear() removeRows( 0, c ); } +void TileModel::onTBLoaded() +{ + loadTileSets(); +} + + void TileModel::addLand( const QString &name ) { m_tileBank->addLand( name ); @@ -315,6 +315,11 @@ void TileModel::removeLand( int idx ) m_tileBank->removeLand( idx ); } +void TileModel::getLands( QStringList &l ) +{ + m_tileBank->getLands( l ); +} + void TileModel::setLandSets( int idx, const QStringList &l ) { m_tileBank->setLandSets( idx, l ); @@ -325,6 +330,15 @@ void TileModel::getLandSets( int idx, QStringList &l ) m_tileBank->getLandSets( idx, l ); } + +bool TileModel::addTileSet( const QString &name ) +{ + m_tileBank->addTileSet( name ); + TileSetNode *tsn = createTileSetNode( name ); + + return false; +} + void TileModel::removeTileSet( int idx ) { TileSetNode *set = static_cast< TileSetNode* >( rootItem->child( idx ) ); @@ -341,6 +355,35 @@ void TileModel::renameTileSet( int idx, const QString &newName ) m_tileBank->renameTileSet( idx, newName ); } +bool TileModel::addTile( int ts, int type, const QString &fileName, TileConstants::TTileChannel channel ) +{ + TileSetNode *tsn = static_cast< TileSetNode* >( rootItem->child( ts ) ); + if( tsn == NULL ) + return false; + + TileTypeNode *ttn = static_cast< TileTypeNode* >( tsn->child( type ) ); + if( ttn == NULL ) + return false; + + int tile = ttn->childCount(); + + TileConstants::TNodeTileType t = TileConstants::TNodeTileType( type ); + + TileItemNode *item = new TileItemNode( t, tile, channel, fileName ); + + bool b = m_tileBank->addTile( ts, fileName, item->pixmap( channel ), channel, t ); + if( !b ) + { + delete item; + return false; + } + + item->setParent( ttn ); + ttn->appendRow( item ); + + return true; +} + void TileModel::removeTile( int ts, int type, int tile ) { TileSetNode *set = static_cast< TileSetNode* >( rootItem->child( ts ) ); @@ -458,4 +501,73 @@ void TileModel::selectFilenameDisplay(bool selected) void TileModel::selectIndexDisplay(bool selected) { m_indexDisplay = selected; -} \ No newline at end of file +} + +void TileModel::loadTileSets() +{ + QStringList l; + m_tileBank->getTileSets( l ); + + // Create tile sets + QStringListIterator itr( l ); + while( itr.hasNext() ) + { + createTileSetNode( itr.next() ); + } + + // Loads sets + int c = rootItem->childCount(); + for( int i = 0; i < c; i++ ) + { + loadTileSet( i ); + } +} + + +void TileModel::loadTileSet( int tileSet ) +{ + TileSetNode *set = static_cast< TileSetNode* >( rootItem->child( tileSet ) ); + + QList< TileImages > l; + //for( int i = TileConstants::Tile128; i < TileConstants::TileNodeTypeCount; i++ ) + //for( int i = TileConstants::Tile128; i < TileConstants::TileTransition; i++ ) + for( int i = TileConstants::Tile128; i < TileConstants::TileDisplacement; i++ ) + { + TileConstants::TNodeTileType type = TileConstants::TNodeTileType( i ); + l.clear(); + m_tileBank->getTileImages( tileSet, type, l ); + + loadTileTypeNode( tileSet, type, l ); + } +} + +void TileModel::loadTileTypeNode( int tileSet, int type, const QList< TileImages > &l ) +{ + TileSetNode *set = static_cast< TileSetNode* >( rootItem->child( tileSet ) ); + TileTypeNode *ttn = static_cast< TileTypeNode* >( set->child( type ) ); + + int tile = 0; + + QList< TileImages >::const_iterator itr = l.begin(); + while( itr != l.end() ) + { + const TileImages &images = *itr; + + TileItemNode *item = NULL; + + if( ( type == TileConstants::Tile128 ) || ( type == TileConstants::Tile256 ) ) + item = new TileItemNode( TileConstants::TNodeTileType( type ), tile, ttn ); + else + item = static_cast< TileItemNode* >( ttn->child( tile ) ); + + item->setTileFilename( TileConstants::TileDiffuse, images.diffuse ); + item->setTileFilename( TileConstants::TileAdditive, images.additive ); + item->setTileFilename( TileConstants::TileAlpha, images.alpha ); + + if( ( type == TileConstants::Tile128 ) || ( type == TileConstants::Tile256 ) ) + ttn->appendRow( item ); + + ++itr; + tile++; + } +} diff --git a/code/studio/src/plugins/tile_editor/tile_model.h b/code/studio/src/plugins/tile_editor/tile_model.h index c831daae2..b0e3232b9 100644 --- a/code/studio/src/plugins/tile_editor/tile_model.h +++ b/code/studio/src/plugins/tile_editor/tile_model.h @@ -22,6 +22,7 @@ #include #include "tile_constants.h" +#include "tile_images.h" namespace NLMISC { @@ -32,6 +33,7 @@ class Node; class TileSetNode; class TileItemNode; class TileBank; +class TileModelPvt; class TileModel : public QAbstractItemModel { @@ -77,8 +79,6 @@ public: void swapRows( int a, int b ); - TileSetNode *createTileSetNode(QString tileSetName); - static TileItemNode *createItemNode( TileConstants::TNodeTileType type, int id, TileConstants::TTileChannel channel, const QString &fileName ); TileItemNode *createItemNode( int idx, TileConstants::TNodeTileType type, int id, TileConstants::TTileChannel channel, const QString &fileName ); static const char *getTileTypeName(TileConstants::TNodeTileType type); @@ -89,13 +89,20 @@ public: bool hasTileSet( const QString &name ); void clear(); + void onTBLoaded(); void addLand( const QString &name ); void removeLand( int idx ); + void getLands( QStringList &l ); + + bool addTileSet( const QString &name ); + void removeTileSet( int idx ); void renameTileSet( int idx, const QString &newName ); void setLandSets( int idx, const QStringList &l ); void getLandSets( int idx, QStringList &l ); + + bool addTile( int ts, int type, const QString &fileName, TileConstants::TTileChannel channel ); void removeTile( int ts, int type, int tile ); bool replaceImage( int ts, int type, int tile, TileConstants::TTileChannel channel, const QString &name ); void clearImage( int ts, int type, int tile, TileConstants::TTileChannel channel ); @@ -122,7 +129,11 @@ public Q_SLOTS: void selectIndexDisplay(bool selected); private: + TileSetNode *createTileSetNode(QString tileSetName); Node *getItem(const QModelIndex &index) const; + void loadTileSets(); + void loadTileSet( int tileSet ); + void loadTileTypeNode( int tileSet, int type, const QList< TileImages > &l ); bool m_fileDisplay; bool m_indexDisplay; @@ -133,6 +144,7 @@ private: Node *rootItem; TileBank *m_tileBank; + TileModelPvt *pvt; }; #endif // TILE_MODEL_H diff --git a/code/studio/src/plugins/tile_editor/tilebank_loader.cpp b/code/studio/src/plugins/tile_editor/tilebank_loader.cpp index 945fd0908..1aaa055f0 100644 --- a/code/studio/src/plugins/tile_editor/tilebank_loader.cpp +++ b/code/studio/src/plugins/tile_editor/tilebank_loader.cpp @@ -18,35 +18,23 @@ #include "tilebank_loader.h" #include "tile_model.h" -#include "tile_item.h" - -#include "nel/3d/tile_bank.h" #include "nel/misc/file.h" -class TileBankLoaderPvt -{ -public: -}; - - TileBankLoader::TileBankLoader() { - p = new TileBankLoaderPvt; } TileBankLoader::~TileBankLoader() { - delete p; - p = NULL; } -bool TileBankLoader::load( const char *filename, TileModel *model, QList< Land > &lands ) +bool TileBankLoader::load( const char *filename, TileModel *model ) { NLMISC::CIFile file; if( !file.open( filename, false ) ) return false; - //p->bank.serial( file ); + model->serial( file ); file.close(); diff --git a/code/studio/src/plugins/tile_editor/tilebank_loader.h b/code/studio/src/plugins/tile_editor/tilebank_loader.h index 1f3498d6e..643cab67f 100644 --- a/code/studio/src/plugins/tile_editor/tilebank_loader.h +++ b/code/studio/src/plugins/tile_editor/tilebank_loader.h @@ -17,10 +17,7 @@ #ifndef TILEBANK_LOADER_H #define TILEBANK_LOADER_H -#include "land.h" - class TileModel; -class TileBankLoaderPvt; class TileBankLoader { @@ -28,10 +25,9 @@ public: TileBankLoader(); ~TileBankLoader(); - bool load( const char *filename, TileModel *model, QList< Land > &lands ); + bool load( const char *filename, TileModel *model ); private: - TileBankLoaderPvt *p; }; diff --git a/code/studio/src/plugins/tile_editor/tilebank_saver.cpp b/code/studio/src/plugins/tile_editor/tilebank_saver.cpp index a0b8abcfb..3f087c979 100644 --- a/code/studio/src/plugins/tile_editor/tilebank_saver.cpp +++ b/code/studio/src/plugins/tile_editor/tilebank_saver.cpp @@ -22,21 +22,12 @@ #include "nel/3d/tile_bank.h" #include "nel/misc/file.h" -class TileBankSaverPvt -{ -public: - -}; - TileBankSaver::TileBankSaver() { - p = new TileBankSaverPvt(); } TileBankSaver::~TileBankSaver() { - delete p; - p = NULL; } bool TileBankSaver::save( const char *fileName, TileModel* model ) diff --git a/code/studio/src/plugins/tile_editor/tilebank_saver.h b/code/studio/src/plugins/tile_editor/tilebank_saver.h index ef1e0de94..0f8983157 100644 --- a/code/studio/src/plugins/tile_editor/tilebank_saver.h +++ b/code/studio/src/plugins/tile_editor/tilebank_saver.h @@ -22,7 +22,6 @@ #include class TileModel; -class TileBankSaverPvt; class TileBankSaver { @@ -33,7 +32,7 @@ public: bool save( const char *filename, TileModel* model ); private: - TileBankSaverPvt *p; + }; #endif