Esempio n. 1
0
bool ResourceManager::hasArchive(ArchiveType archive, const Common::UString &file) {
	assert((archive >= 0) && (archive < kArchiveMAX));

	if (archive == kArchiveNDS)
		return Common::File::exists(file);

	return !findArchive(file, _archiveDirs[archive], _archiveFiles[archive]).empty();
}
Esempio n. 2
0
void ResourceManager::findBIFs(const KEYFile &key, std::vector<Common::UString> &bifs) {
	const KEYFile::BIFList &keyBIFs = key.getBIFs();

	bifs.resize(keyBIFs.size());

	KEYFile::BIFList::const_iterator       keyBIF = keyBIFs.begin();
	std::vector<Common::UString>::iterator bif    = bifs.begin();
	for (; (keyBIF != keyBIFs.end()) && (bif != bifs.end()); ++keyBIF, ++bif) {

		*bif = findArchive(*keyBIF, _archiveDirs[kArchiveBIF], _archiveFiles[kArchiveBIF]);
		if (bif->empty())
			throw Common::Exception("BIF \"%s\" not found", keyBIF->c_str());

	}
}
Esempio n. 3
0
ResourceManager::ChangeID ResourceManager::addArchive(ArchiveType archive,
		const Common::UString &file, uint32 priority) {

	// NDS aren't found in resource directories, they are used /instead/ of directories
	if (archive == kArchiveNDS) {
		NDSFile *nds = new NDSFile(file);

		ChangeID change = newChangeSet();

		return indexArchive(nds, priority, change);
	}

	// HERF files are only found inside NDS files
	if (archive == kArchiveHERF) {
		HERFFile *herf = new HERFFile(file);

		ChangeID change = newChangeSet();

		return indexArchive(herf, priority, change);
	}

	assert((archive >= 0) && (archive < kArchiveMAX));

	if (archive == kArchiveBIF)
		throw Common::Exception("Attempted to index a lone BIF");

	Common::UString realName = findArchive(file, _archiveDirs[archive], _archiveFiles[archive]);
	if (realName.empty())
		throw Common::Exception("No such archive file \"%s\"", file.c_str());

	if (archive == kArchiveKEY)
		return indexKEY(realName, priority);

	if (archive == kArchiveERF) {
		ERFFile *erf = new ERFFile(realName);

		ChangeID change = newChangeSet();

		return indexArchive(erf, priority, change);
	}

	if (archive == kArchiveRIM) {
		RIMFile *rim = new RIMFile(realName);

		ChangeID change = newChangeSet();

		return indexArchive(rim, priority, change);
	}

	if (archive == kArchiveZIP) {
		ZIPFile *zip = new ZIPFile(realName);

		ChangeID change = newChangeSet();

		return indexArchive(zip, priority, change);
	}

	if (archive == kArchiveEXE) {
		PEFile *pe = new PEFile(realName, _cursorRemap);

		ChangeID change = newChangeSet();

		return indexArchive(pe, priority, change);
	}

	return ChangeID();
}
Esempio n. 4
0
InterfaceProxy *DataManager::getObjectInterface(ObjectID const &id, std::string const &path_str, DataArchive const *d) const {
	DataArchive *archive = findArchive(id, path_str, d);
	return archive->getObjectInterface(id);
}
Esempio n. 5
0
const LinkBase DataManager::getObject(Path const& path, std::string const &path_str, DataArchive const *d) const {
	hasht id = (hasht) path.getPath();
	DataArchive *archive = findArchive(id, path_str, d);
	return archive->getObject(path, path_str);
}