25
26
#include "textfileparser.h"
26
27
#include "sgstream.h"
27
28
#include "textfile_evaluation.h"
37
ProgressBar* actprogressbar = NULL;
40
pobjecttype eisbrecherobject = NULL;
41
pobjecttype fahrspurobject = NULL;
29
#include "messaginghub.h"
32
SigC::Signal0<void> dataLoaderTicker;
35
const char* cacheFileName = "asc2.cache";
44
37
typedef vector<TextFileDataLoader*> DataLoaders;
45
38
DataLoaders dataLoaders;
57
void ItemRepository<T>::RegisterID::operator() (int id )
59
typename ObjectMap::iterator i = repository.hash.find ( id );
60
if ( i != repository.hash.end() && i->second )
61
duplicateIDError ( repository.typeName, id, object->location, object->name, i->second->location, i->second->name );
62
repository.hash[ id ] = object;
65
68
void ItemRepository<T>::add( T* obj )
67
typename ObjectMap::iterator i = hash.find ( obj->id );
68
if ( i != hash.end() && i->second )
69
duplicateIDError ( typeName, obj->id, obj->location, obj->name, i->second->location, i->second->name );
70
RegisterID reg(*this, obj);
73
for_each ( obj->secondaryIDs.begin(), obj->secondaryIDs.end(), reg );
71
76
container.push_back( obj );
72
hash[ obj->id ] = obj;
77
void ItemRepository<T>::readTextFiles( PropertyReadingContainer& prc, const ASCString& fileName, const ASCString& location )
81
void ItemRepositoryLoader<T>::readTextFiles( PropertyReadingContainer& prc, const ASCString& fileName, const ASCString& location )
80
84
t->runTextIO ( prc );
83
86
t->filename = fileName;
84
87
t->location = location;
90
void ItemRepository<T>::read( tnstream& stream )
93
void ItemRepositoryLoader<T>::read( tnstream& stream )
92
95
int version = stream.readInt();
97
throw tinvalidversion( stream.getLocation(), 1, version );
93
98
int num = stream.readInt();
94
99
for ( int i = 0; i< num; ++i ) {
96
actprogressbar->point();
99
103
t->read( stream );
101
105
t->filename = stream.readString();
102
106
t->location = stream.readString();
105
110
// add ( T::newFromStream(stream ));
110
115
template<class T>
111
void ItemRepository<T>::write( tnstream& stream )
116
void ItemRepositoryLoader<T>::write( tnstream& stream )
113
118
stream.writeInt( 1 );
114
stream.writeInt( container.size() );
115
for ( typename vector<T*>::iterator i = container.begin(); i != container.end(); ++i ) {
119
stream.writeInt( ItemRepository<T>::container.size() );
120
for ( typename ItemRepository<T>::ItemContainerType::iterator i = ItemRepository<T>::container.begin(); i != ItemRepository<T>::container.end(); ++i ) {
116
121
(*i)->write( stream );
117
122
stream.writeString ( (*i)->filename );
118
123
stream.writeString ( (*i)->location );
122
128
template<class T>
123
129
void ItemRepository<T>::addIdTranslation( int from, int to )
125
131
idTranslation[from] = to;
129
ItemRepository<Vehicletype> vehicleTypeRepository( "vehicletype" );
130
ItemRepository<TerrainType> terrainTypeRepository( "terraintype" );
131
ItemRepository<ObjectType> objectTypeRepository ( "objecttype" );
132
ItemRepository<BuildingType> buildingTypeRepository ("buildingtype");
133
ItemRepository<Technology> technologyRepository ( "technology");
134
MineTypeRepository mineTypeRepository;
137
MineTypeRepository::MineTypeRepository() : ItemRepository<MineType>("Mines")
139
add( new MineType( cmantipersonnelmine ) );
140
add( new MineType( cmantitankmine ) );
141
add( new MineType( cmmooredmine ) );
142
add( new MineType( cmfloatmine ) );
146
ItemRepositoryLoader<Vehicletype> vehicleTypeRepository( "vehicletype" );
147
ItemRepositoryLoader<TerrainType> terrainTypeRepository( "terraintype" );
148
ItemRepositoryLoader<ObjectType> objectTypeRepository ( "objecttype" );
149
ItemRepositoryLoader<BuildingType> buildingTypeRepository ("buildingtype");
150
ItemRepositoryLoader<Technology> technologyRepository ( "technology");
135
152
TechAdapterContainer techAdapterContainer;
189
205
tfindfile::FileInfo fi;
191
tfindfile f ( "*.con", tfindfile::AllDirs, tfindfile::OutsideContainer);
207
tfindfile f ( "*.ascdat", tfindfile::AllDirs, tfindfile::OutsideContainer);
192
208
while ( f.getnextname( fi ))
193
209
actualFileInfo.push_back ( fi );
198
214
actualFileInfo.push_back ( fi );
201
if ( exist ( "asc.cache" )) {
202
stream = new tnfilestream ( "asc.cache", tnstream::reading );
217
if ( exist ( cacheFileName )) {
218
stream = new tnfilestream ( cacheFileName, tnstream::reading );
203
219
int version = stream->readInt();
205
221
if ( version == cacheVersion )
259
stream = new tn_file_buf_stream ( "asc.cache", tnstream::writing );
275
stream = new tn_file_buf_stream ( cacheFileName, tnstream::writing );
261
277
stream->writeInt ( cacheVersion );
262
278
writeClassContainer ( actualFileInfo, *stream );
312
328
catch ( tinvalidversion err ) {
313
fatalError("the cache seems to have been generated with a newer version of ASC than this one.\nPlease upgrade to that version, or delete asc.cache and try again");
329
fatalError("the cache seems to have been generated with a newer version of ASC than this one.\nPlease upgrade to that version, or delete " + ASCString(cacheFileName) + " and try again");
315
331
displayLogMessage ( 4, "loading of cache completed\n");
333
MessagingHub::Instance().statusInformation("rebuilding data cache, please be patient");
317
335
loadalltextfiles();
319
337
for ( DataLoaders::iterator dl = dataLoaders.begin(); dl != dataLoaders.end(); ++dl) {
320
338
TextPropertyList& tpl = textFileRepository[ (*dl)->getTypeName() ];
321
339
for ( TextPropertyList::iterator i = tpl.begin(); i != tpl.end(); i++ ) {
322
if ( actprogressbar )
323
actprogressbar->point();
325
342
if ( !(*i)->isAbstract() ) {
326
343
PropertyReadingContainer pc ( (*dl)->getTypeName(), *i );
345
displayLogMessage ( 5, "loading " + (*i)->location );
328
346
(*dl)->readTextFiles( pc, (*i)->fileName, (*i)->location );
347
displayLogMessage ( 5, " done\n");
388
404
for ( TextPropertyList::iterator j = i->second.begin(); j != i->second.end(); j++ ) {
389
405
displayLogMessage( 9, "Building inheritance: " + (*j)->location + "\n");
390
406
(*j)->buildInheritance( i->second );
391
if ( verbosity >= 10 )
407
if ( MessagingHub::Instance().getVerbosity() >= 10 )
404
vector<ItemFiltrationSystem::ItemFilter*> ItemFiltrationSystem::itemFilters;
420
deallocating_vector<ItemFiltrationSystem::ItemFilter*> ItemFiltrationSystem::itemFilters;
407
423
ItemFiltrationSystem::ItemFilter::ItemFilter( const ASCString& _name, const IntRangeArray& unitsetIDs, bool _active )
510
bool ItemFiltrationSystem::isFiltered( const Vehicletype* item )
512
return isFiltered( Vehicle, item->id );
515
bool ItemFiltrationSystem::isFiltered( const BuildingType* item )
517
return isFiltered( Building, item->id );
520
bool ItemFiltrationSystem::isFiltered( const ObjectType* item )
522
return isFiltered( Object, item->id );
525
bool ItemFiltrationSystem::isFiltered( const TerrainType* item )
527
return isFiltered( Terrain, item->id );
530
bool ItemFiltrationSystem::isFiltered( const MineType* item )
494
536
void ItemFiltrationSystem::DataLoader::readTextFiles( PropertyReadingContainer& prc, const ASCString& fileName, const ASCString& location )
496
538
ItemFilter* itf = new ItemFilter;
497
539
itf->runTextIO ( prc );
500
541
// bmtt->filename = (*i)->fileName;
501
542
// bmtt->location = (*i)->location;