⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamedataset.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	else
	{
		g_dwNmLoad ++;

		// set status
		pNewDAni->SetStatus(ANISTATUS_INIT);

		// keep in deque
		m_mapDataAni[pNewDAni->m_idAni] = pNewDAni;

		// add to read list
		::AddReadDeque(pNewDAni, nExigence);

		return NULL;
	}
}

//--------------------------------------------------------------

void CGameDataSet::ProcessDataAni ()
{
	MAP_DYNAMICANI::iterator iter = m_mapDataAni.begin();
	while(iter != m_mapDataAni.end())
	{
		CDynamicAni* pAni = iter->second;
		if(pAni && ::TimeGet() - pAni->GetTimeBorn() >= pAni->GetLife() &&
			(ANISTATUS_LOADED == pAni->GetStatus() || ANISTATUS_FAILED == pAni->GetStatus()))
		{
			SAFE_DELETE(pAni);
			MAP_DYNAMICANI::iterator iterCopy = iter;
			iterCopy ++;
			m_mapDataAni.erase(iter);
			iter = iterCopy;
		}
		else
		{
			iter ++;
		}
	}
}

//--------------------------------------------------------------
void CGameDataSet::Destroy3DObj()
{
	MAP_3DOBJEX::iterator iter = m_set3DObj.begin();
	while(iter != m_set3DObj.end())
	{
		if(iter->second)
		{
			SAFE_DELETE(iter->second->p3DObj);
			SAFE_DELETE(iter->second->pDefaultMotion);
			SAFE_DELETE(iter->second);
		}
		iter ++;
	}
	m_set3DObj.clear();
}

//--------------------------------------------------------------
void CGameDataSet::Destroy3DMotion()
{
	MAP_3DMOTIONEX::iterator iter = m_set3DMotion.begin();
	while(iter != m_set3DMotion.end())
	{
		if(iter->second)
		{
			SAFE_DELETE(iter->second->p3DMotion);
			SAFE_DELETE(iter->second);
		}
		iter ++;
	}
	m_set3DMotion.clear();
}

//--------------------------------------------------------------
void CGameDataSet::Destroy3DWeaponMotion()
{
	MAP_3DMOTIONEX::iterator iter = m_set3DWeaponMotion.begin();
	while(iter != m_set3DWeaponMotion.end())
	{
		if(iter->second)
		{
			SAFE_DELETE(iter->second->p3DMotion);
			SAFE_DELETE(iter->second);
		}
		iter ++;
	}
	m_set3DWeaponMotion.clear();
}
//--------------------------------------------------------------
void CGameDataSet::Destroy3DMantleMotion()
{
	MAP_3DMOTIONEX::iterator iter = m_set3DMantleMotion.begin();
	while(iter != m_set3DMantleMotion.end())
	{
		if(iter->second)
		{
			SAFE_DELETE(iter->second->p3DMotion);
			SAFE_DELETE(iter->second);
		}
		iter ++;
	}
	m_set3DMantleMotion.clear();
}
//--------------------------------------------------------------
void CGameDataSet::Destroy3DMountMotion()
{
	MAP_3DMOTIONEX::iterator iter = m_set3DMountMotion.begin();
	while(iter != m_set3DMountMotion.end())
	{
		if(iter->second)
		{
			SAFE_DELETE(iter->second->p3DMotion);
			SAFE_DELETE(iter->second);
		}
		iter ++;
	}
	m_set3DMountMotion.clear();
}
//--------------------------------------------------------------
void CGameDataSet::Destroy3DTexture()
{
	MAP_3DTEXTUREEX::iterator iter = m_set3DTexture.begin();
	while(iter != m_set3DTexture.end())
	{
		if(iter->second)
		{
			SAFE_DELETE(iter->second->p3DTexture);
			SAFE_DELETE(iter->second);
		}
		iter ++;
	}
	m_set3DTexture.clear();
}
//--------------------------------------------------------------
void CGameDataSet::Destroy3DEffect()
{
	MAP_3DEFFECTEX::iterator iter = m_set3DEffect.begin();
	while(iter != m_set3DEffect.end())
	{
		if(iter->second)
		{
			SAFE_DELETE(iter->second->p3DEffect);
			SAFE_DELETE(iter->second);
		}
		iter ++;
	}
	m_set3DEffect.clear();
	int nAmount = m_set3DEffect.size();
}
//--------------------------------------------------------------
void CGameDataSet::DestroyDataAni()
{
	MAP_DYNAMICANI::iterator iter = m_mapDataAni.begin();
	while(iter != m_mapDataAni.end())
	{
		if(iter->second)
			SAFE_DELETE(iter->second);
		iter ++;
	}
	m_mapDataAni.clear();
}

DWORD g_dwMeshTime = 0;
DWORD g_dwMeshLoad = 0;
//--------------------------------------------------------------
C3DObj* CGameDataSet::Get3DObj	(OBJID id)
{
	MYASSERT (id != ID_NONE);

	// search first
	MAP_3DOBJEX::iterator iterF = m_set3DObj.find(id);
	if(iterF != m_set3DObj.end())
	{
		C3DObjInfo* pInfo = iterF->second;
		if(pInfo)
		{
			pInfo->timeBirth = ::TimeGet();
			return pInfo->p3DObj;
		}
	}	

	// create new obj
	map<OBJID, string>::iterator iter = m_mapResMesh.find(id);
	if (iter == m_mapResMesh.end())
	{
		const OBJID id3DObjError = 500006;
		::ErrorOut(g_objGameDataSet.GetStr(id3DObjError), id);
		return NULL;
	}

	char szFileName[_MAX_PATH] = "";
	strcpy(szFileName, iter->second.c_str());

	
	DWORD time0 = ::TimeGet();

	C3DObj* p3DObj = new C3DObj;
	MYASSERT (p3DObj);

	if (!p3DObj->Create(szFileName))
	{
		SAFE_DELETE(p3DObj);
		const OBJID idMeshError = 500007;
		::ErrorOut(g_objGameDataSet.GetStr(idMeshError), szFileName);
		return NULL;
	}

	g_dwMeshTime += (::TimeGet()-time0);
	g_dwMeshLoad++;

	C3DMotion* p3DMotion = this->CreateNew3DMotion(szFileName);
	if (!p3DMotion)
	{
		SAFE_DELETE(p3DObj);
		const OBJID idMotionError = 500008;
		::ErrorOut(g_objGameDataSet.GetStr(idMotionError), szFileName);
		return NULL;
	}

	// set default motion
	p3DObj->SetMotion(p3DMotion);

	// 3d obj info
	C3DObjInfo* pInfo = new C3DObjInfo;
	MYASSERT (pInfo);


	pInfo->id				= id;
	pInfo->p3DObj			= p3DObj;
	pInfo->pDefaultMotion	= p3DMotion;
	pInfo->timeBirth		= ::TimeGet();

	// add to set
	m_set3DObj[pInfo->id] = pInfo;
	return p3DObj;
}

//--------------------------------------------------------------
C3DObjInfo* CGameDataSet::Get3DObjInfo (OBJID id)
{
	MYASSERT (id != ID_NONE);

	MAP_3DOBJEX::iterator iter = m_set3DObj.find(id);
	if(iter != m_set3DObj.end())
	{
		C3DObjInfo* pInfo = iter->second;
		if(pInfo)
		{
			pInfo->timeBirth = ::TimeGet();
			return pInfo;
		}
	}	

	return NULL;
}
//--------------------------------------------------------------
C3DMotion*  CGameDataSet::Get3DMantleMotion (OBJID id)
{
	if (id == ID_NONE)
		return NULL;
	MAP_3DMOTIONEX::iterator iter = m_set3DMantleMotion.find(id);
	if(m_set3DMantleMotion.end() != iter)
	{
		C3DMotionInfo* pInfo = iter->second;
		if(pInfo)
		{
			pInfo->timeBirth = ::TimeGet();
			return pInfo->p3DMotion;
		}
	}

	// create new
	C3DMotion* p3DObj = this->CreateNew3DMantleMotion(id);
	if (!p3DObj)
		return NULL;

	// create motion info
	C3DMotionInfo* pInfo = new C3DMotionInfo;
	if (!pInfo)
	{
		SAFE_DELETE(p3DObj);
		return NULL;
	}

	pInfo->id		 = id;
	pInfo->p3DMotion = p3DObj;
	pInfo->timeBirth = ::TimeGet();

	// add to set
	m_set3DMantleMotion[pInfo->id] = pInfo;
	return p3DObj;
}
//--------------------------------------------------------------
C3DMotion*  CGameDataSet::Get3DMountMotion (OBJID id)
{
	if (id == ID_NONE)
		return NULL;
	MAP_3DMOTIONEX::iterator iter = m_set3DMountMotion.find(id);
	if(m_set3DMountMotion.end() != iter)
	{
		C3DMotionInfo* pInfo = iter->second;
		if(pInfo)
		{
			pInfo->timeBirth = ::TimeGet();
			return pInfo->p3DMotion;
		}
	}
	
	// create new
	C3DMotion* p3DObj = this->CreateNew3DMountMotion(id);
	if (!p3DObj)
		return NULL;
	
	// create motion info
	C3DMotionInfo* pInfo = new C3DMotionInfo;
	if (!pInfo)
	{
		SAFE_DELETE(p3DObj);
		return NULL;
	}
	
	pInfo->id		 = id;
	pInfo->p3DMotion = p3DObj;
	pInfo->timeBirth = ::TimeGet();
	
	// add to set
	m_set3DMountMotion[pInfo->id] = pInfo;
	return p3DObj;
}

//--------------------------------------------------------------
C3DMotion*  CGameDataSet::Get3DWeaponMotion (OBJID id)
{
	if (id == ID_NONE)
		return NULL;
	MAP_3DMOTIONEX::iterator iter = m_set3DWeaponMotion.find(id);
	if(m_set3DWeaponMotion.end() != iter)
	{
		C3DMotionInfo* pInfo = iter->second;
		if(pInfo)
		{
			pInfo->timeBirth = ::TimeGet();
			return pInfo->p3DMotion;
		}
	}

	// create new
	C3DMotion* p3DObj = this->CreateNew3DWeaponMotion(id);
	if (!p3DObj)
		return NULL;

	// create motion info
	C3DMotionInfo* pInfo = new C3DMotionInfo;
	if (!pInfo)
	{
		SAFE_DELETE(p3DObj);
		return NULL;
	}

	pInfo->id		 = id;
	pInfo->p3DMotion = p3DObj;
	pInfo->timeBirth = ::TimeGet();

	// add to set
	m_set3DWeaponMotion[pInfo->id] = pInfo;
	return p3DObj;
}
//--------------------------------------------------------------

C3DMotion* CGameDataSet::Get3DMotion(OBJID id)
{
	if (id == ID_NONE)
		return NULL;

	MAP_3DMOTIONEX::iterator iter = m_set3DMotion.find(id);
	if(m_set3DMotion.end() != iter)
	{
		C3DMotionInfo* pInfo = iter->second;
		if(pInfo)
		{
			pInfo->timeBirth = ::TimeGet();
			return pInfo->p3DMotion;
		}
	}

	// create new
	C3DMotion* p3DObj = this->CreateNew3DMotion(id);
	if (!p3DObj)
		return NULL;

	// create motion info
	C3DMotionInfo* pInfo = new C3DMotionInfo;
	if (!pInfo)
	{
		SAFE_DELETE(p3DObj);
		return NULL;
	}

	pInfo->id		 = id;
	pInfo->p3DMotion = p3DObj;
	pInfo->timeBirth = ::TimeGet();

	// add to set
	m_set3DMotion[pInfo->id]	=	pInfo;
	return p3DObj;
}

//--------------------------------------------------------------
C3DTexture* CGameDataSet::Get3DTexture(OBJID id)
{
	// search first
	MAP_3DTEXTUREEX::iterator iter = m_set3DTexture.find(id);
	if(iter != m_set3DTexture.end())
	{
		C3DTextureInfo* pObj = iter->second;
		if(pObj)
		{
			pObj->timeBirth = ::TimeGet();
			return pObj->p3DTexture;
		}
	}
	
	// create new
	C3DTexture* p3DObj = this->CreateNew3DTexture(id);
	if(!p3DObj)
		return NULL;

	// add to set
	C3DTextureInfo* pInfo = new C3DTextureInfo;
	if(!pInfo)
	{
		SAFE_DELETE(p3DObj);
		return NULL;
	}

	pInfo->id		  = id;
	pInfo->p3DTexture = p3DObj;
	pInfo->timeBirth  = ::TimeGet();
	m_set3DTexture[pInfo->id]	=	pInfo;
	return p3DObj;
}
//--------------------------------------------------------------
C3DEffect* CGameDataSet::Get3DEffect(OBJID id)
{
	// search first
	MAP_3DEFFECTEX::iterator iter = m_set3DEffect.find(id);
	if(iter != m_set3DEffect.end())
	{
		C3DEffectInfo* pObj = iter->second;
		if(pObj)
		{
			pObj->timeBirth = ::TimeGet();
			return pObj->p3DEffect;
		}
	}

	// create new
	C3DEffect* p3DObj = this->CreateNew3DEffect(id);
	if(!p3DObj)
		return NULL;

	// add to set
	C3DEffectInfo* pInfo = new C3DEffectInfo;
	if(!pInfo)
	{
		SAFE_DELETE(p3DObj);
		return NULL;
	}

	pInfo->id = id;
	pInfo->p3DEffect = p3DObj;
	pInfo->timeBirth = ::TimeGet();
	m_set3DEffect[pInfo->id]	=	pInfo;
	return p3DObj;
}
//--------------------------------------------------------------
C3DMotion* CGameDataSet::CreateNew3DMotion(OBJID id)
{
	if (id == ID_NONE)
		return NULL;

	map<OBJID, string>::iterator iter = m_mapResMotion.find(id);
	if (iter == m_mapResMotion.end())
	{
/*#ifdef _DEBUG
		const OBJID idActionError = 500009;
		::ErrorMsg(g_objGameDataSet.GetStr(idActionError), id);
#else*/
		const OBJID idActionError = 500009;
		::LogMsg(g_objGameDataSet.GetStr(idActionError), id);
//#endif
		return NULL;
	}

	return this->CreateNew3DMotion(iter->second.c_str());
}
//--------------------------------------------------------------
C3DMotion* CGameDataSet::CreateNew3DMountMotion(OBJID id)
{
	if (id == ID_NONE)
		return NULL;
	
	map<OBJID, string>::iterator iter = m_mapResMountMotion.find(id);
	if (iter == m_mapResMountMotion.end())
	{
		return NULL;
	}
	
	return this->CreateNew3DMotion(iter->second.c_str());
}
//--------------------------------------------------------------
C3DMotion* CGameDataSet::CreateNew3DMantleMotion(OBJID id)
{
	if (id == ID_NONE)
		return NULL;
	
	map<OBJID, string>::iterator iter = m_mapResMantleMotion.find(id);
	if (iter == m_mapResMantleMotion.end())
	{
		//::ErrorMsg("错误:没有发现id[%u]的武器动作!", id);
		return NULL;
	}
	
	return this->CreateNew3DMotion(iter->second.c_str());
}
//--------------------------------------------------------------
C3DMotion* CGameDataSet::CreateNew3DWeaponMotion(OBJID id)
{
	if (id == ID_NONE)
		return NULL;

	map<OBJID, string>::iterator iter = m_mapResWeaponMotion.find(id);
	if (iter == m_mapResWeaponMotion.end())
	{
		//::ErrorMsg("错误:没有发现id[%u]的武器动作!", id);
		return NULL;
	}

	return this->CreateNew3DMotion(iter->second.c_str());
}

//--------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -