bool CParaWorldAsset::UnloadAssetByKeyName(const string& keyname)
{
	string sFileExt = CParaFile::GetFileExtension(keyname);
	if(sFileExt == "dds" || sFileExt == "png")
	{
		TextureEntity* pEntity = (TextureEntity*) GetTextureManager().get(keyname);
		if(pEntity && (pEntity->GetState()==AssetEntity::ASSET_STATE_FAILED_TO_LOAD || pEntity->IsLoaded()))
		{
			pEntity->UnloadAsset();
			pEntity->SetLocalFileName("");
			if(pEntity->GetState()==AssetEntity::ASSET_STATE_FAILED_TO_LOAD)
				pEntity->SetState(AssetEntity::ASSET_STATE_NORMAL);
			return true;
		}
	}

	else if(sFileExt == "x" || sFileExt == "xml")
	{
		{
			MeshEntity* pEntity = (MeshEntity*) GetMeshManager().get(keyname);
			if(pEntity && pEntity->IsLoaded())
			{
				pEntity->UnloadAsset();
				pEntity->SetLocalFileName("");
				return true;
			}
		}
		{
			ParaXEntity* pEntity = (ParaXEntity*) GetParaXManager().get(keyname);
			if(pEntity && pEntity->IsLoaded())
			{
				pEntity->UnloadAsset();
				pEntity->SetLocalFileName("");
				return true;
			}
		}
	}
#ifdef USE_DIRECTX_RENDERER
	else if(sFileExt == "iges")
	{
		CadModel* pCadModel = (CadModel*) m_CadModelManager.get(keyname);
		if(pCadModel && pCadModel->IsLoaded())
		{
			pCadModel->UnloadAsset();
			pCadModel->SetLocalFileName("");
			return true;
		}
	}
#endif
	return false;
}
void ParaEngine::CFaceLayers::OnTaskCompleted()
{
	for (int i = 0; i < CFS_TOTAL_NUM; ++i)
	{
		const FaceTextureComponent& component = m_layers[i];

		// load the component texture
		if (component.name.empty())
			continue;

		TextureEntity* pTextureEntity = NULL;
		AssetFileEntry* pEntry = CAssetManifest::GetSingleton().GetFile(component.name);
		if (pEntry)
			pTextureEntity = CGlobals::GetAssetManager()->LoadTexture(pEntry->GetLocalFileName(), pEntry->GetLocalFileName());
		else
			pTextureEntity = CGlobals::GetAssetManager()->LoadTexture(component.name, component.name);

		if (pTextureEntity)
		{
			pTextureEntity->UnloadAsset();
		}
	}
}
void ParaEngine::CSkinLayers::OnTaskCompleted()
{
	int nSize = (int)m_layers.size();
	for (int i = 0; i < nSize; ++i)
	{
		CharTextureComponent &component = m_layers[i];
		const CharRegionCoords &coords = CCharCustomizeSysSetting::regions[component.region];

		// load the component texture
		if (component.name.empty())
			continue;
		string componentfilename = component.name;
		AssetFileEntry* pEntry = CAssetManifest::GetSingleton().GetFile(componentfilename);
		if (pEntry)
			componentfilename = pEntry->GetLocalFileName();

		TextureEntity* pTextureEntity = CGlobals::GetAssetManager()->LoadTexture(componentfilename, componentfilename);

		if (pTextureEntity)
		{
			pTextureEntity->UnloadAsset();
		}
	}
}