From 055ee6ab5b51c0e0fbaa8e6e9e66850ac48504aa Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 15 Jun 2010 12:12:21 +0000 Subject: SCI: Add virtual method ResourceSource::scanSource svn-id: r49816 --- engines/sci/resource.cpp | 59 +++++++++++++++++++++++-------------------- engines/sci/resource.h | 9 +++++++ engines/sci/resource_intern.h | 16 ++++++++++++ 3 files changed, 56 insertions(+), 28 deletions(-) diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index 44b4525cd2..74f99ecd03 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -623,38 +623,41 @@ void ResourceManager::scanNewSources() { if (!source->scanned) { source->scanned = true; - switch (source->getSourceType()) { - case kSourceDirectory: - readResourcePatches(source); - - // We can't use getSciVersion() at this point, thus using _volVersion - if (_volVersion >= kResVersionSci11) // SCI1.1+ - readResourcePatchesBase36(source); - - readWaveAudioPatches(); - break; - case kSourceExtMap: - if (_mapVersion < kResVersionSci1Late) - readResourceMapSCI0(source); - else - readResourceMapSCI1(source); - break; - case kSourceExtAudioMap: - readAudioMapSCI1(source); - break; - case kSourceIntMap: - readAudioMapSCI11(source); - break; - case kSourceMacResourceFork: - readMacResourceFork(source); - break; - default: - break; - } + source->scanSource(this); } } } +void DirectoryResourceSource::scanSource(ResourceManager *resMan) { + resMan->readResourcePatches(this); + + // We can't use getSciVersion() at this point, thus using _volVersion + if (resMan->_volVersion >= ResourceManager::kResVersionSci11) // SCI1.1+ + resMan->readResourcePatchesBase36(this); + + resMan->readWaveAudioPatches(); +} + +void ExtMapResourceSource::scanSource(ResourceManager *resMan) { + if (resMan->_mapVersion < ResourceManager::kResVersionSci1Late) + resMan->readResourceMapSCI0(this); + else + resMan->readResourceMapSCI1(this); +} + +void ExtAudioMapResourceSource::scanSource(ResourceManager *resMan) { + resMan->readAudioMapSCI1(this); +} + +void IntMapResourceSource::scanSource(ResourceManager *resMan) { + resMan->readAudioMapSCI11(this); +} + +void MacResourceForkResourceSource::scanSource(ResourceManager *resMan) { + resMan->readMacResourceFork(this); +} + + void ResourceManager::freeResourceSources() { for (Common::List::iterator it = _sources.begin(); it != _sources.end(); ++it) delete *it; diff --git a/engines/sci/resource.h b/engines/sci/resource.h index 826fbff850..8720e8eabb 100644 --- a/engines/sci/resource.h +++ b/engines/sci/resource.h @@ -194,6 +194,15 @@ protected: typedef Common::HashMap ResourceMap; class ResourceManager { + // FIXME: These 'friend' declarations are meant to be a temporary hack to + // ease transition to the ResourceSource class system. + friend class ResourceSource; + friend class DirectoryResourceSource; + friend class ExtMapResourceSource; + friend class IntMapResourceSource; + friend class ExtAudioMapResourceSource; + friend class MacResourceForkResourceSource; + public: enum ResVersion { kResVersionUnknown, diff --git a/engines/sci/resource_intern.h b/engines/sci/resource_intern.h index 15fd5c391d..fc07572cea 100644 --- a/engines/sci/resource_intern.h +++ b/engines/sci/resource_intern.h @@ -72,11 +72,19 @@ public: virtual ResourceSource *findVolume(ResourceSource *map, int volume_nr) { return NULL; }; + + /** + * Scan this source for TODO. + * TODO: The resMan param for now is just a hack. + */ + virtual void scanSource(ResourceManager *resMan) {} }; class DirectoryResourceSource : public ResourceSource { public: DirectoryResourceSource(const Common::String &name) : ResourceSource(kSourceDirectory, name) {} + + virtual void scanSource(ResourceManager *resMan); }; class PatchResourceSource : public ResourceSource { @@ -101,11 +109,15 @@ public: class ExtMapResourceSource : public ResourceSource { public: ExtMapResourceSource(const Common::String &name) : ResourceSource(kSourceExtMap, name) {} + + virtual void scanSource(ResourceManager *resMan); }; class IntMapResourceSource : public ResourceSource { public: IntMapResourceSource(const Common::String &name) : ResourceSource(kSourceIntMap, name) {} + + virtual void scanSource(ResourceManager *resMan); }; class AudioVolumeResourceSource : public VolumeResourceSource { @@ -118,6 +130,8 @@ public: class ExtAudioMapResourceSource : public ResourceSource { public: ExtAudioMapResourceSource(const Common::String &name) : ResourceSource(kSourceExtAudioMap, name) {} + + virtual void scanSource(ResourceManager *resMan); }; class WaveResourceSource : public ResourceSource { @@ -128,6 +142,8 @@ public: class MacResourceForkResourceSource : public ResourceSource { public: MacResourceForkResourceSource(const Common::String &name) : ResourceSource(kSourceMacResourceFork, name) {} + + virtual void scanSource(ResourceManager *resMan); }; } // End of namespace Sci -- cgit v1.2.3