📄 debris.cpp
字号:
// ----------------------------------------------------------------------- //
//
// 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 + -