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

📄 debris.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : Debris.cpp
//
// PURPOSE : Debris implementation
//
// CREATED : 5/12/98
//
// ----------------------------------------------------------------------- //

#include "Debris.h"
#include "cpp_server_de.h"
#include "ObjectUtilities.h"
#include "generic_msg_de.h"
#include "SFXMsgIds.h"
#include "Gib.h"
#include "ClientGibFX.h"
#include "SoundTypes.h"


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::CDebris()
//
//	PURPOSE:	Initialize object
//
// ----------------------------------------------------------------------- //

CDebris::CDebris() : Aggregate()
{
	m_hObject			= DNULL;

	m_hstrSound	= DNULL;
	m_hstrTexture1	= DNULL;
	m_hstrTexture2	= DNULL;
	m_hstrModel1	= DNULL;
	m_hstrModel2	= DNULL;

	m_nAmount	= 10;
	m_bStone	= DFALSE;
	m_bMetal	= DFALSE;
	m_bWood		= DFALSE;
	m_bEnergy	= DFALSE;
	m_bGlass	= DFALSE;
	m_bTerrain	= DFALSE;
	m_bPlastic	= DFALSE;
	m_bFlesh	= DFALSE;
	m_bLiquid	= DFALSE;
	m_bExploding = DFALSE;
	m_bCustom	= DFALSE;
	m_fScale	= 1.0f;

	m_fDamageRadius		= 200;
	m_fExplodeDamage	= 100;

	m_eType		= SURFTYPE_UNKNOWN;
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::~CDebris()
//
//	PURPOSE:	Destroy object
//
// ----------------------------------------------------------------------- //

CDebris::~CDebris()
{
	CServerDE* pServerDE = BaseClass::GetServerDE();
	if (!pServerDE) return;

	if (m_hstrSound)
	{
		pServerDE->FreeString(m_hstrSound);
	}
	if (m_hstrModel1)
	{
		pServerDE->FreeString(m_hstrModel1);
	}
	if (m_hstrModel2)
	{
		pServerDE->FreeString(m_hstrModel2);
	}

	if (m_hstrTexture1)
	{
		pServerDE->FreeString(m_hstrTexture1);
	}
	if (m_hstrTexture2)
	{
		pServerDE->FreeString(m_hstrTexture2);
	}
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::EngineMessageFn
//
//	PURPOSE:	Handle engine messages
//
// ----------------------------------------------------------------------- //

DDWORD CDebris::EngineMessageFn(LPBASECLASS pObject, DDWORD messageID, void *pData, DFLOAT fData)
{
	switch(messageID)
	{
		case MID_PRECREATE:
		{
			ObjectCreateStruct* pStruct = (ObjectCreateStruct*)pData;
			
			if (pStruct)
			{
				if (fData == PRECREATE_WORLDFILE || fData == PRECREATE_STRINGPROP)
				{
					ReadProp(pStruct);
				}
			}
			break;
		}

		case MID_INITIALUPDATE:
		{
			if (fData != INITIALUPDATE_SAVEGAME)
				InitialUpdate();
			break;
		}

		case MID_SAVEOBJECT:
		{
			Save((HMESSAGEWRITE)pData, (DDWORD)fData);
		}
		break;

		case MID_LOADOBJECT:
		{
			Load((HMESSAGEREAD)pData, (DDWORD)fData);
		}
		break;

		default : break;
	}


	return Aggregate::EngineMessageFn(pObject, messageID, pData, fData);
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::ReadProp
//
//	PURPOSE:	Set property value
//
// ----------------------------------------------------------------------- //

DBOOL CDebris::ReadProp(ObjectCreateStruct *)
{
	CServerDE* pServerDE = BaseClass::GetServerDE();
	if (!pServerDE) return DFALSE;

	long nLongVal;
	if (pServerDE->GetPropLongInt("Amount", &nLongVal) == DE_OK)
		m_nAmount = (DBYTE)nLongVal;

	DBOOL bBoolVal;
	if (pServerDE->GetPropBool("Stone", &bBoolVal) == DE_OK)
		m_bStone = bBoolVal;

	if (pServerDE->GetPropBool("Metal", &bBoolVal) == DE_OK)
		m_bMetal = bBoolVal;

	if (pServerDE->GetPropBool("Wood", &bBoolVal) == DE_OK)
		m_bWood = bBoolVal;
	
	if (pServerDE->GetPropBool("Energy", &bBoolVal) == DE_OK)
		m_bEnergy = bBoolVal;
	
	if (pServerDE->GetPropBool("Glass", &bBoolVal) == DE_OK)
		m_bGlass = bBoolVal;
	
	if (pServerDE->GetPropBool("Terrain", &bBoolVal) == DE_OK)
		m_bTerrain = bBoolVal;

	if (pServerDE->GetPropBool("Plastic", &bBoolVal) == DE_OK)
		m_bPlastic = bBoolVal;

	if (pServerDE->GetPropBool("Metal", &bBoolVal) == DE_OK)
		m_bMetal = bBoolVal;

	if (pServerDE->GetPropBool("Liquid", &bBoolVal) == DE_OK)
		m_bLiquid = bBoolVal;

	if (pServerDE->GetPropBool("Custom", &bBoolVal) == DE_OK)
		m_bCustom = bBoolVal;

	if (pServerDE->GetPropBool("Flesh", &bBoolVal) == DE_OK)
		m_bFlesh = bBoolVal;

	if (pServerDE->GetPropBool("Exploding", &bBoolVal) == DE_OK)
		m_bExploding = bBoolVal;

	DFLOAT fRealVal;
	if (pServerDE->GetPropReal("Scale", &fRealVal) == DE_OK)
		m_fScale = fRealVal;

	char buf[MAX_CS_FILENAME_LEN];
	if (pServerDE->GetPropString("CustomSound", buf, MAX_CS_FILENAME_LEN) == DE_OK)
	{
		if (_mbstrlen(buf) > 0)
			m_hstrSound = pServerDE->CreateString(buf);
	}

	if (pServerDE->GetPropString("CustomModel", buf, MAX_CS_FILENAME_LEN) == DE_OK)
	{
		if (_mbstrlen(buf) > 0)
		{
			m_hstrModel1 = pServerDE->CreateString(buf);
//			m_hstrModel2 = pServerDE->CopyString(m_hstrModel1);
		}
	}

	if (pServerDE->GetPropString("CustomTexture", buf, MAX_CS_FILENAME_LEN) == DE_OK)
	{
		if (_mbstrlen(buf) > 0)
		{
			m_hstrTexture1 = pServerDE->CreateString(buf);
//			m_hstrTexture2 = pServerDE->CopyString(m_hstrTexture1);
		}
	}

	return DTRUE;
}



// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::Init
//
//	PURPOSE:	Initialize object
//
// ----------------------------------------------------------------------- //

DBOOL CDebris::Init(HOBJECT hObject)
{
	CServerDE* pServerDE = BaseClass::GetServerDE();
	if (!hObject || !pServerDE) return DFALSE;

	m_hObject = hObject;

	return DTRUE;
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CDebris::InitialUpdate()
//
//	PURPOSE:	First update
//
// ----------------------------------------------------------------------- //

void CDebris::InitialUpdate()
{
	CServerDE* pServerDE = BaseClass::GetServerDE();

⌨️ 快捷键说明

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