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

📄 debris.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if (!pServerDE) return;

	if (m_bStone)
		m_eType = SURFTYPE_STONE;
	else if (m_bMetal)
		m_eType = SURFTYPE_METAL;
	else if (m_bWood)
		m_eType = SURFTYPE_WOOD;
	else if (m_bTerrain)
		m_eType = SURFTYPE_TERRAIN;
	else if (m_bPlastic)
		m_eType = SURFTYPE_PLASTIC;
	else if (m_bGlass)
		m_eType = SURFTYPE_GLASS;
	else if (m_bFlesh)
		m_eType = SURFTYPE_FLESH;
	else if (m_bLiquid)
		m_eType = SURFTYPE_LIQUID;
	else if (m_bEnergy)
		m_eType = SURFTYPE_ENERGY;

//	m_eType = m_eType / 10;

}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::Create
//
//	PURPOSE:	Create the debris
//
// ----------------------------------------------------------------------- //

void CDebris::Create(DVector vDir, DFLOAT fDamage)
{
	if (!g_pServerDE) return;

//	HCLASS hClass = g_pServerDE->GetClass( "CClientGibFX" );
//	if( !hClass )
//		return;

	VEC_NEGATE(vDir, vDir);

	DFLOAT fVelFactor = 1.0f;

//	DDWORD nType = m_eType*10;
//	if (nType == SURFTYPE_STONE || nType == SURFTYPE_METAL)
//		fVelFactor = 0.75f;

	DFLOAT fVel = 50.0f + fDamage;

	vDir.y -= 1.0f;
	VEC_NORM(vDir);

	VEC_MULSCALAR(vDir, vDir, fVel);

//	ObjectCreateStruct ocStruct;
//	INIT_OBJECTCREATESTRUCT(ocStruct);

	DVector vPos;
	g_pServerDE->GetObjectPos(m_hObject, &vPos);

	if (m_bExploding)
		AddExplosion(vPos);
	
//	VEC_COPY(ocStruct.m_Pos, vPos);
//	g_pServerDE->GetObjectRotation(m_hObject, &ocStruct.m_Rotation);

	DVector vDims;
	g_pServerDE->GetObjectDims( m_hObject, &vDims );

	DDWORD dwCustom = (m_hstrModel1 || m_hstrTexture1 || m_hstrSound) ? TYPEFLAG_CUSTOM : 0;

//	CClientGibFX* pGib;

	if (m_bStone /* && (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct)) */)
	{
//		pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_STONE/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
//			m_hstrModel1, m_hstrTexture1, m_hstrSound);
		SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_STONE/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
			m_hstrModel1, m_hstrTexture1, m_hstrSound);
	}

	if (m_bMetal /* && (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct)) */)
	{
//		pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_METAL/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
//			m_hstrModel1, m_hstrTexture1, m_hstrSound);
		SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_METAL/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
			m_hstrModel1, m_hstrTexture1, m_hstrSound);
	}

	if (m_bWood /* && (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct)) */)
	{
//		pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_WOOD/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
//			m_hstrModel1, m_hstrTexture1, m_hstrSound);
		SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_WOOD/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
			m_hstrModel1, m_hstrTexture1, m_hstrSound);
	}

	if (m_bTerrain /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct)) */)
	{
//		pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_TERRAIN/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
//			m_hstrModel1, m_hstrTexture1, m_hstrSound);
		SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_TERRAIN/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
			m_hstrModel1, m_hstrTexture1, m_hstrSound);
	}

	if (m_bPlastic /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
	{
//		pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_PLASTIC/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
//			m_hstrModel1, m_hstrTexture1, m_hstrSound);
		SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_PLASTIC/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
			m_hstrModel1, m_hstrTexture1, m_hstrSound);
	}

	if (m_bGlass /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
	{
//		pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_GLASS/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
//			m_hstrModel1, m_hstrTexture1, m_hstrSound);
		SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_GLASS/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
			m_hstrModel1, m_hstrTexture1, m_hstrSound);
	}

	if (m_bFlesh /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
	{
//		pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_FLESH/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
//			m_hstrModel1, m_hstrTexture1, m_hstrSound);
		SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_FLESH/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
			m_hstrModel1, m_hstrTexture1, m_hstrSound);
	}

	if (m_bLiquid /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
	{
//		pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_LIQUID/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
//			m_hstrModel1, m_hstrTexture1, m_hstrSound);
		SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_LIQUID/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
			m_hstrModel1, m_hstrTexture1, m_hstrSound);
	}

	if (m_bEnergy /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
	{
//		pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_ENERGY/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
//			m_hstrModel1, m_hstrTexture1, m_hstrSound);
		SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_ENERGY/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
			m_hstrModel1, m_hstrTexture1, m_hstrSound);
	}
}




// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::AddExplosion()
//
//	PURPOSE:	Add an explosion
//
// ----------------------------------------------------------------------- //

void CDebris::AddExplosion(DVector &vPos)
{
	CServerDE* pServerDE = BaseClass::GetServerDE();
	if (!pServerDE) return;

	DDWORD		nType = EXP_GRENADE;
	DVector		vUp;
	VEC_SET(vUp, 0.0f, 1.0f, 0.0f);

	HMESSAGEWRITE hMessage = pServerDE->StartInstantSpecialEffectMessage(&vPos);
	pServerDE->WriteToMessageByte(hMessage, SFX_EXPLOSIONFX_ID);

	pServerDE->WriteToMessageVector(hMessage, &vPos);
	pServerDE->WriteToMessageVector(hMessage, &vUp);
	pServerDE->WriteToMessageDWord(hMessage, nType);

	pServerDE->EndMessage(hMessage);

	PlaySoundFromPos(&vPos, "Sounds\\Weapons\\c4\\explosion_1.wav", 1000.0f, SOUNDPRIORITY_MISC_MEDIUM);

	// Do some damage
	if (m_fExplodeDamage && m_fDamageRadius)
		DamageObjectsInRadius(m_hObject, pServerDE->HandleToObject(m_hObject), vPos, m_fDamageRadius, m_fExplodeDamage, DAMAGE_TYPE_EXPLODE);
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::Save
//
//	PURPOSE:	Save the object
//
// ----------------------------------------------------------------------- //

void CDebris::Save(HMESSAGEWRITE hWrite, DDWORD dwSaveFlags)
{
	CServerDE* pServerDE = BaseClass::GetServerDE();
	if (!pServerDE || !hWrite) return;

	pServerDE->WriteToLoadSaveMessageObject(hWrite, m_hObject);
	pServerDE->WriteToMessageHString(hWrite, m_hstrSound);
	pServerDE->WriteToMessageHString(hWrite, m_hstrTexture1);
	pServerDE->WriteToMessageHString(hWrite, m_hstrTexture2);
	pServerDE->WriteToMessageHString(hWrite, m_hstrModel1);
	pServerDE->WriteToMessageHString(hWrite, m_hstrModel2);
	pServerDE->WriteToMessageByte(hWrite, m_nAmount);
	pServerDE->WriteToMessageFloat(hWrite, m_fScale);
	pServerDE->WriteToMessageByte(hWrite, m_bExploding);
	pServerDE->WriteToMessageByte(hWrite, m_bStone);
	pServerDE->WriteToMessageByte(hWrite, m_bMetal);
	pServerDE->WriteToMessageByte(hWrite, m_bWood);	
	pServerDE->WriteToMessageByte(hWrite, m_bEnergy);
	pServerDE->WriteToMessageByte(hWrite, m_bGlass);
	pServerDE->WriteToMessageByte(hWrite, m_bTerrain);
	pServerDE->WriteToMessageByte(hWrite, m_bPlastic);
	pServerDE->WriteToMessageByte(hWrite, m_bFlesh);
	pServerDE->WriteToMessageByte(hWrite, m_bLiquid);
	pServerDE->WriteToMessageByte(hWrite, m_bCustom);
	pServerDE->WriteToMessageDWord(hWrite, (DDWORD)m_eType);

	pServerDE->WriteToMessageFloat(hWrite, m_fDamageRadius);
	pServerDE->WriteToMessageFloat(hWrite, m_fExplodeDamage);
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::Load
//
//	PURPOSE:	Load the object
//
// ----------------------------------------------------------------------- //

void CDebris::Load(HMESSAGEREAD hRead, DDWORD dwLoadFlags)
{
	CServerDE* pServerDE = BaseClass::GetServerDE();
	if (!pServerDE || !hRead) return;

	pServerDE->ReadFromLoadSaveMessageObject(hRead, &m_hObject);
	m_hstrSound		= pServerDE->ReadFromMessageHString(hRead);
	m_hstrTexture1	= pServerDE->ReadFromMessageHString(hRead);
	m_hstrTexture2	= pServerDE->ReadFromMessageHString(hRead);
	m_hstrModel1	= pServerDE->ReadFromMessageHString(hRead);
	m_hstrModel2	= pServerDE->ReadFromMessageHString(hRead);
	m_nAmount		= pServerDE->ReadFromMessageByte(hRead);
	m_fScale		= pServerDE->ReadFromMessageFloat(hRead);
	m_bExploding	= pServerDE->ReadFromMessageByte(hRead);
	m_bStone		= pServerDE->ReadFromMessageByte(hRead);
	m_bMetal		= pServerDE->ReadFromMessageByte(hRead);
	m_bWood			= pServerDE->ReadFromMessageByte(hRead);
	m_bEnergy		= pServerDE->ReadFromMessageByte(hRead);
	m_bGlass		= pServerDE->ReadFromMessageByte(hRead);
	m_bTerrain		= pServerDE->ReadFromMessageByte(hRead);
	m_bPlastic		= pServerDE->ReadFromMessageByte(hRead);
	m_bFlesh		= pServerDE->ReadFromMessageByte(hRead);
	m_bLiquid		= pServerDE->ReadFromMessageByte(hRead);
	m_bCustom		= pServerDE->ReadFromMessageByte(hRead);
	m_eType			= (SurfaceType)pServerDE->ReadFromMessageDWord(hRead);

	m_fDamageRadius	= pServerDE->ReadFromMessageFloat(hRead);
	m_fExplodeDamage = pServerDE->ReadFromMessageFloat(hRead);

}



⌨️ 快捷键说明

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