Example #1
0
	Asset* AssetManager::findAsset(int type, const String& name, intptr_t arg) {
		SCOPE_LOCK;

		checkType(__func__, type);

		Data* d = m_datas[type];

		AssetDict::iterator it =d->assetDict.find(d->factory->generateKey(name, arg));
		if ( it != d->assetDict.end()) {
			it->second->addref();
			return it->second;
		}

		Asset* a = d->factory->create();
		if (a->init(name, arg)) {
			a->m_key = a->getKey();
			AX_ASSERT(!a->m_key.empty());
			d->assetDict[a->m_key] = a;

			return a;
		}

		d->factory->destroy(a);
		SafeAddRef(d->defaulted);
		return d->defaulted;
	}
Example #2
0
	Asset* AssetManager::uniqueAsset(int type, const String& name, intptr_t arg /*= 0 */) {
		SCOPE_LOCK;

		checkType(__func__, type);

		Data* d = m_datas[type];

		Asset* a = d->factory->create();
		if (a->init(name, arg)) {
			a->m_key = a->getKey() + "$" + Uuid::generateUuid();
			d->assetDict[a->m_key] = a;

			return a;
		}

		d->factory->destroy(a);
		return d->defaulted;
	}