📄 clientwarpgatesfx.cpp
字号:
// ----------------------------------------------------------------------- //
//
// MODULE : ClientWarpGateSFX.cpp
//
// PURPOSE : CClientWarpGateSFX - Definition
//
// CREATED : 8-15-98
//
// ----------------------------------------------------------------------- //
#include "ClientWarpGateSFX.h"
#include "ClientServerShared.h"
#include "ObjectUtilities.h"
#include "cpp_server_de.h"
#include "SFXMsgIds.h"
#include <mbstring.h>
BEGIN_CLASS(CClientWarpGateSFX)
ADD_REALPROP(RampUpTime, 5.0f)
ADD_REALPROP(RampDownTime, 5.0f)
ADD_BOOLPROP(InitiallyOn, DFALSE)
PROP_DEFINEGROUP(SpriteData, PF_GROUP1)
ADD_REALPROP_FLAG(SpriteMinScale, 0.1f, PF_GROUP1)
ADD_REALPROP_FLAG(SpriteMaxScale, 1.0f, PF_GROUP1)
ADD_REALPROP_FLAG(SpriteAlpha, 0.75f, PF_GROUP1)
ADD_LONGINTPROP_FLAG(SpriteRampUpType, 1, PF_GROUP1)
ADD_LONGINTPROP_FLAG(SpriteRampDownType, 2, PF_GROUP1)
ADD_BOOLPROP_FLAG(SpriteAlign, DFALSE, PF_GROUP1)
ADD_STRINGPROP_FLAG(SpriteFile, "Sprites\\rift.spr", PF_GROUP1)
PROP_DEFINEGROUP(ParticleSystem1Data, PF_GROUP2)
ADD_REALPROP_FLAG(PS1SystemRadius, 5000.0f, PF_GROUP2)
ADD_REALPROP_FLAG(PS1PositionRadius, 100.0f, PF_RADIUS | PF_GROUP2)
ADD_VECTORPROP_FLAG(PS1Offset, PF_GROUP2)
ADD_VECTORPROP_FLAG(PS1Rotations, PF_GROUP2)
ADD_REALPROP_FLAG(PS1MinVelocity, 10.0f, PF_GROUP2)
ADD_REALPROP_FLAG(PS1MaxVelocity, 25.0f, PF_GROUP2)
ADD_LONGINTPROP_FLAG(PS1NumParticles, 10, PF_GROUP2)
ADD_LONGINTPROP_FLAG(PS1EmitType, 1, PF_GROUP2)
ADD_COLORPROP_FLAG(PS1MinColor, 50.0f, 50.0f, 50.0f, PF_GROUP2)
ADD_COLORPROP_FLAG(PS1MaxColor, 255.0f, 255.0f, 255.0f, PF_GROUP2)
ADD_REALPROP_FLAG(PS1SystemAlpha, 0.5f, PF_GROUP2)
ADD_REALPROP_FLAG(PS1MinLifetime, 4.0f, PF_GROUP2)
ADD_REALPROP_FLAG(PS1MaxLifetime, 5.0f, PF_GROUP2)
ADD_REALPROP_FLAG(PS1AddDelay, 0.25f, PF_GROUP2)
ADD_REALPROP_FLAG(PS1Gravity, 15.0f, PF_GROUP2)
ADD_LONGINTPROP_FLAG(PS1RampUpType, 1, PF_GROUP2)
ADD_LONGINTPROP_FLAG(PS1RampDownType, 1, PF_GROUP2)
ADD_BOOLPROP_FLAG(PS1Align, DFALSE, PF_GROUP2)
ADD_STRINGPROP_FLAG(PS1ParticleFile, "SpriteTextures\\smoke64_3.dtx", PF_GROUP2)
PROP_DEFINEGROUP(ParticleSystem2Data, PF_GROUP3)
ADD_REALPROP_FLAG(PS2SystemRadius, 5000.0f, PF_GROUP3)
ADD_REALPROP_FLAG(PS2PositionRadius, 100.0f, PF_RADIUS | PF_GROUP3)
ADD_VECTORPROP_FLAG(PS2Offset, PF_GROUP3)
ADD_VECTORPROP_FLAG(PS2Rotations, PF_GROUP3)
ADD_REALPROP_FLAG(PS2MinVelocity, 10.0f, PF_GROUP3)
ADD_REALPROP_FLAG(PS2MaxVelocity, 25.0f, PF_GROUP3)
ADD_LONGINTPROP_FLAG(PS2NumParticles, 10, PF_GROUP3)
ADD_LONGINTPROP_FLAG(PS2EmitType, 1, PF_GROUP3)
ADD_COLORPROP_FLAG(PS2MinColor, 50.0f, 50.0f, 50.0f, PF_GROUP3)
ADD_COLORPROP_FLAG(PS2MaxColor, 255.0f, 255.0f, 255.0f, PF_GROUP3)
ADD_REALPROP_FLAG(PS2SystemAlpha, 0.5f, PF_GROUP3)
ADD_REALPROP_FLAG(PS2MinLifetime, 4.0f, PF_GROUP3)
ADD_REALPROP_FLAG(PS2MaxLifetime, 5.0f, PF_GROUP3)
ADD_REALPROP_FLAG(PS2AddDelay, 0.25f, PF_GROUP3)
ADD_REALPROP_FLAG(PS2Gravity, 15.0f, PF_GROUP3)
ADD_LONGINTPROP_FLAG(PS2RampUpType, 1, PF_GROUP3)
ADD_LONGINTPROP_FLAG(PS2RampDownType, 1, PF_GROUP3)
ADD_BOOLPROP_FLAG(PS2Align, DFALSE, PF_GROUP3)
ADD_STRINGPROP_FLAG(PS2ParticleFile, "SpriteTextures\\lensflare_1.dtx", PF_GROUP3)
ADD_REALPROP(SoundRadius, 200.0f)
ADD_STRINGPROP(RampUpSound, "")
ADD_STRINGPROP(LoopSound, "")
ADD_STRINGPROP(RampDownSound, "")
END_CLASS_DEFAULT(CClientWarpGateSFX, CClientSFX, NULL, NULL)
// ----------------------------------------------------------------------- //
CClientWarpGateSFX::CClientWarpGateSFX()
{
// [blg]
bOn = DTRUE;
bFirstUpdate = DFALSE;
bInitiallyOn = DFALSE;
fRampUpTime = 5.0f;
fRampDownTime = 5.0f;
fSoundRadius = 200.0f;
hstrSound1 = DNULL;
hstrSound2 = DNULL;
hstrSound3 = DNULL;
wSpr.fMinScale = 0.1f;
wSpr.fMaxScale = 1.0f;
wSpr.fAlpha = 0.75f;
wSpr.nRampUpType = 1;
wSpr.nRampDownType = 2;
wSpr.bAlign = DFALSE;
wSpr.hstrSprite = g_pServerDE->CreateString("Sprites\\rift.spr");
wPS1.fSystemRadius = 5000.0f;
wPS1.fPosRadius = 100.0f;
wPS1.vOffset;
wPS1.vRotations;
wPS1.fMinVelocity = 10.0f;
wPS1.fMaxVelocity = 25.0f;
wPS1.nNumParticles = 10;
wPS1.nEmitType = 1;
VEC_SET(wPS1.vMinColor, 50.0f, 50.0f, 50.0f);
VEC_SET(wPS1.vMaxColor, 255.0f, 255.0f, 255.0f);
wPS1.fAlpha = 0.5f;
wPS1.fMinLifetime = 4.0f;
wPS1.fMaxLifetime = 5.0f;
wPS1.fAddDelay = 0.25f;
wPS1.fGravity = 15.0f;
wPS1.nRampUpType = 1;
wPS1.nRampDownType = 1;
wPS1.bAlign = DFALSE;
wPS1.hstrParticle = g_pServerDE->CreateString("SpriteTextures\\smoke64_3.dtx");
wPS2.fSystemRadius = 5000.0f;
wPS2.fPosRadius = 100.0f;
wPS2.vOffset;
wPS2.vRotations;
wPS2.fMinVelocity = 10.0f;
wPS2.fMaxVelocity = 25.0f;
wPS2.nNumParticles = 10;
wPS2.nEmitType = 1;
VEC_SET(wPS2.vMinColor, 50.0f, 50.0f, 50.0f);
VEC_SET(wPS2.vMaxColor, 255.0f, 255.0f, 255.0f);
wPS2.fAlpha = 0.5f;
wPS2.fMinLifetime = 4.0f;
wPS2.fMaxLifetime = 5.0f;
wPS2.fAddDelay = 0.25f;
wPS2.fGravity = 15.0f;
wPS2.nRampUpType = 1;
wPS2.nRampDownType = 1;
wPS2.bAlign = DFALSE;
wPS2.hstrParticle = g_pServerDE->CreateString("SpriteTextures\\lensflare_1.dtx");
}
CClientWarpGateSFX::~CClientWarpGateSFX()
{
if (wSpr.hstrSprite)
{
g_pServerDE->FreeString(wSpr.hstrSprite);
}
if (wPS1.hstrParticle)
{
g_pServerDE->FreeString(wPS1.hstrParticle);
}
if (wPS2.hstrParticle)
{
g_pServerDE->FreeString(wPS2.hstrParticle);
}
}
// ----------------------------------------------------------------------- //
void CClientWarpGateSFX::SetupFX()
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return;
DVector tempPos;
pServerDE->GetObjectPos(m_hObject, &tempPos);
if(wSpr.hstrSprite)
{
HMESSAGEWRITE hMessage = pServerDE->StartInstantSpecialEffectMessage(&tempPos);
pServerDE->WriteToMessageByte(hMessage, SFX_WARPGATESPRITE_ID);
pServerDE->WriteToMessageObject(hMessage, m_hObject);
pServerDE->WriteToMessageFloat(hMessage, fRampUpTime);
pServerDE->WriteToMessageFloat(hMessage, fRampDownTime);
pServerDE->WriteToMessageFloat(hMessage, wSpr.fMinScale);
pServerDE->WriteToMessageFloat(hMessage, wSpr.fMaxScale);
pServerDE->WriteToMessageFloat(hMessage, wSpr.fAlpha);
pServerDE->WriteToMessageDWord(hMessage, wSpr.nRampUpType);
pServerDE->WriteToMessageDWord(hMessage, wSpr.nRampDownType);
pServerDE->WriteToMessageByte(hMessage, wSpr.bAlign);
pServerDE->WriteToMessageHString(hMessage, wSpr.hstrSprite);
pServerDE->EndMessage(hMessage);
}
if(wPS1.hstrParticle)
{
HMESSAGEWRITE hMessage = pServerDE->StartInstantSpecialEffectMessage(&tempPos);
pServerDE->WriteToMessageByte(hMessage, SFX_WARPGATEPARTICLE_ID);
pServerDE->WriteToMessageObject(hMessage, m_hObject);
pServerDE->WriteToMessageFloat(hMessage, fRampUpTime);
pServerDE->WriteToMessageFloat(hMessage, fRampDownTime);
pServerDE->WriteToMessageFloat(hMessage, wPS1.fSystemRadius);
pServerDE->WriteToMessageFloat(hMessage, wPS1.fPosRadius);
pServerDE->WriteToMessageVector(hMessage, &wPS1.vOffset);
pServerDE->WriteToMessageVector(hMessage, &wPS1.vRotations);
pServerDE->WriteToMessageFloat(hMessage, wPS1.fMinVelocity);
pServerDE->WriteToMessageFloat(hMessage, wPS1.fMaxVelocity);
pServerDE->WriteToMessageDWord(hMessage, wPS1.nNumParticles);
pServerDE->WriteToMessageDWord(hMessage, wPS1.nEmitType);
pServerDE->WriteToMessageVector(hMessage, &wPS1.vMinColor);
pServerDE->WriteToMessageVector(hMessage, &wPS1.vMaxColor);
pServerDE->WriteToMessageFloat(hMessage, wPS1.fAlpha);
pServerDE->WriteToMessageFloat(hMessage, wPS1.fMinLifetime);
pServerDE->WriteToMessageFloat(hMessage, wPS1.fMaxLifetime);
pServerDE->WriteToMessageFloat(hMessage, wPS1.fAddDelay);
pServerDE->WriteToMessageFloat(hMessage, wPS1.fGravity);
pServerDE->WriteToMessageDWord(hMessage, wPS1.nRampUpType);
pServerDE->WriteToMessageDWord(hMessage, wPS1.nRampDownType);
pServerDE->WriteToMessageByte(hMessage, wPS1.bAlign);
pServerDE->WriteToMessageHString(hMessage, wPS1.hstrParticle);
pServerDE->EndMessage(hMessage);
}
if(wPS2.hstrParticle)
{
HMESSAGEWRITE hMessage = pServerDE->StartInstantSpecialEffectMessage(&tempPos);
pServerDE->WriteToMessageByte(hMessage, SFX_WARPGATEPARTICLE_ID);
pServerDE->WriteToMessageObject(hMessage, m_hObject);
pServerDE->WriteToMessageFloat(hMessage, fRampUpTime);
pServerDE->WriteToMessageFloat(hMessage, fRampDownTime);
pServerDE->WriteToMessageFloat(hMessage, wPS2.fSystemRadius);
pServerDE->WriteToMessageFloat(hMessage, wPS2.fPosRadius);
pServerDE->WriteToMessageVector(hMessage, &wPS2.vOffset);
pServerDE->WriteToMessageVector(hMessage, &wPS2.vRotations);
pServerDE->WriteToMessageFloat(hMessage, wPS2.fMinVelocity);
pServerDE->WriteToMessageFloat(hMessage, wPS2.fMaxVelocity);
pServerDE->WriteToMessageDWord(hMessage, wPS2.nNumParticles);
pServerDE->WriteToMessageDWord(hMessage, wPS2.nEmitType);
pServerDE->WriteToMessageVector(hMessage, &wPS2.vMinColor);
pServerDE->WriteToMessageVector(hMessage, &wPS2.vMaxColor);
pServerDE->WriteToMessageFloat(hMessage, wPS2.fAlpha);
pServerDE->WriteToMessageFloat(hMessage, wPS2.fMinLifetime);
pServerDE->WriteToMessageFloat(hMessage, wPS2.fMaxLifetime);
pServerDE->WriteToMessageFloat(hMessage, wPS2.fAddDelay);
pServerDE->WriteToMessageFloat(hMessage, wPS2.fGravity);
pServerDE->WriteToMessageDWord(hMessage, wPS2.nRampUpType);
pServerDE->WriteToMessageDWord(hMessage, wPS2.nRampDownType);
pServerDE->WriteToMessageByte(hMessage, wPS2.bAlign);
pServerDE->WriteToMessageHString(hMessage, wPS2.hstrParticle);
pServerDE->EndMessage(hMessage);
}
}
// ----------------------------------------------------------------------- //
DDWORD CClientWarpGateSFX::ObjectMessageFn(HOBJECT hSender, DDWORD messageID, HMESSAGEREAD hRead)
{
switch(messageID)
{
case MID_TRIGGER:
{
HandleTrigger(hSender, hRead);
break;
}
default : break;
}
return CClientSFX::ObjectMessageFn(hSender, messageID, hRead);
}
// ----------------------------------------------------------------------- //
DDWORD CClientWarpGateSFX::EngineMessageFn(DDWORD messageID, void *pData, DFLOAT fData)
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return 0;
switch(messageID)
{
case MID_PRECREATE:
{
if (fData == PRECREATE_WORLDFILE) // [blg]
{
ReadProp((ObjectCreateStruct*)pData);
}
break;
}
case MID_INITIALUPDATE:
{
pServerDE->SetNextUpdate(m_hObject, 1.0f);
DDWORD dwFlags = g_pServerDE->GetObjectFlags(m_hObject);
dwFlags &= ~FLAG_GRAVITY;
dwFlags |= FLAG_FORCECLIENTUPDATE;
g_pServerDE->SetObjectFlags(m_hObject, dwFlags);
DDWORD dwUsrFlags = g_pServerDE->GetObjectUserFlags(m_hObject);
if(bOn) dwUsrFlags |= USRFLG_VISIBLE;
else dwUsrFlags &= ~USRFLG_VISIBLE;
dwUsrFlags |= USRFLG_SAVEABLE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -