[Scummvm-cvs-logs] SF.net SVN: scummvm:[49816] scummvm/trunk/engines/sci

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Tue Jun 15 14:12:21 CEST 2010


Revision: 49816
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49816&view=rev
Author:   fingolfin
Date:     2010-06-15 12:12:21 +0000 (Tue, 15 Jun 2010)

Log Message:
-----------
SCI: Add virtual method ResourceSource::scanSource

Modified Paths:
--------------
    scummvm/trunk/engines/sci/resource.cpp
    scummvm/trunk/engines/sci/resource.h
    scummvm/trunk/engines/sci/resource_intern.h

Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp	2010-06-15 12:11:56 UTC (rev 49815)
+++ scummvm/trunk/engines/sci/resource.cpp	2010-06-15 12:12:21 UTC (rev 49816)
@@ -623,38 +623,41 @@
 
 		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<ResourceSource *>::iterator it = _sources.begin(); it != _sources.end(); ++it)
 		delete *it;

Modified: scummvm/trunk/engines/sci/resource.h
===================================================================
--- scummvm/trunk/engines/sci/resource.h	2010-06-15 12:11:56 UTC (rev 49815)
+++ scummvm/trunk/engines/sci/resource.h	2010-06-15 12:12:21 UTC (rev 49816)
@@ -194,6 +194,15 @@
 typedef Common::HashMap<ResourceId, Resource *, ResourceIdHash, ResourceIdEqualTo> 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,

Modified: scummvm/trunk/engines/sci/resource_intern.h
===================================================================
--- scummvm/trunk/engines/sci/resource_intern.h	2010-06-15 12:11:56 UTC (rev 49815)
+++ scummvm/trunk/engines/sci/resource_intern.h	2010-06-15 12:12:21 UTC (rev 49816)
@@ -72,11 +72,19 @@
 	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 @@
 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 @@
 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 @@
 class MacResourceForkResourceSource : public ResourceSource {
 public:
 	MacResourceForkResourceSource(const Common::String &name) : ResourceSource(kSourceMacResourceFork, name) {}
+
+	virtual void scanSource(ResourceManager *resMan);
 };
 
 } // End of namespace Sci


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list