Example #1
0
	// add factory
	void AssetManager::registerType(int type, AssetFactory* factory) {
		SCOPE_LOCK;

		if (type < 0 || type >= Asset::MAX_TYPES)
			Errorf("out of bound");

		if (m_datas[type] != nullptr) {
			Errorf("already registered");
		}

		int poolsize = factory->getPoolSize();
		m_datas[type] = TypeNew<Data>(poolsize);
		m_datas[type]->factory = factory;
		m_datas[type]->poolHint = factory->getPoolHint();

		Asset* defaulted = factory->getDefaulted();

		if (defaulted == nullptr) {
			defaulted = factory->create();
			if (!defaulted->doInit("default", 0)) {
				factory->destroy(defaulted);
				defaulted = nullptr;
			}
		}
		m_datas[type]->defaulted = defaulted;
		if (defaulted != nullptr) {
			defaulted->m_isDefaulted = true;
		} else {
			// TODO
			Debugf("%s: can't found defaulted asset for type\n", __func__);
		}
	}