📄 sfxmgr.cpp
字号:
expCS.fSpread = m_pClientDE->ReadFromMessageFloat(hMessage);
expCS.fDuration = m_pClientDE->ReadFromMessageFloat(hMessage);
expCS.fVelocity = m_pClientDE->ReadFromMessageFloat(hMessage);
expCS.fBounceMod = m_pClientDE->ReadFromMessageFloat(hMessage);
expCS.fGravity = m_pClientDE->ReadFromMessageFloat(hMessage);
expCS.fFadeTime = m_pClientDE->ReadFromMessageFloat(hMessage);
expCS.bRandDir = m_pClientDE->ReadFromMessageByte(hMessage);
expCS.szModel = m_pClientDE->ReadFromMessageHString(hMessage);
expCS.szSkin = m_pClientDE->ReadFromMessageHString(hMessage);
CreateSFX(SFX_EXPLOSIONFRAG_ID, &expCS);
}
break;
case SFX_EXPLOSIONFX_ID :
{
EXPLOSIONFXCS expCS;
expCS.hServerObj = 0;
m_pClientDE->ReadFromMessageVector(hMessage, &(expCS.vPos));
m_pClientDE->ReadFromMessageVector(hMessage, &(expCS.vNormal));
expCS.nType = m_pClientDE->ReadFromMessageDWord(hMessage);
CreateSFX(SFX_EXPLOSIONFX_ID, &expCS);
}
break;
case SFX_CAMERA_ID :
{
CAMERACREATESTRUCT camera;
DBYTE nFlags;
camera.hServerObj = hObj;
camera.nType = m_pClientDE->ReadFromMessageByte(hMessage);
nFlags = (DBOOL)m_pClientDE->ReadFromMessageByte(hMessage);
camera.bPlayerMovement = ( nFlags & CAMERASFXFLAG_ALLOWPLAYERMOVEMENT ) ? DTRUE : DFALSE;
camera.bHidePlayer = ( nFlags & CAMERASFXFLAG_HIDEPLAYER ) ? DTRUE : DFALSE;
camera.bIsListener = ( nFlags & CAMERASFXFLAG_ISLISTENER ) ? DTRUE : DFALSE;
// m_pClientDE->CPrint("Camera client object: %d", hObj);
CreateSFX(nId, &camera);
}
break;
case SFX_LIGHT_ID :
{
LIGHTCREATESTRUCT light;
light.hServerObj = hObj;
m_pClientDE->ReadFromMessageVector(hMessage, &light.vColor);
light.dwLightFlags = m_pClientDE->ReadFromMessageDWord(hMessage);
light.fIntensityMin = m_pClientDE->ReadFromMessageFloat(hMessage);
light.fIntensityMax = m_pClientDE->ReadFromMessageFloat(hMessage);
light.nIntensityWaveform = m_pClientDE->ReadFromMessageByte(hMessage);
light.fIntensityFreq = m_pClientDE->ReadFromMessageFloat(hMessage);
light.fIntensityPhase = m_pClientDE->ReadFromMessageFloat(hMessage);
light.fRadiusMin = m_pClientDE->ReadFromMessageFloat(hMessage);
light.fRadiusMax = m_pClientDE->ReadFromMessageFloat(hMessage);
light.nRadiusWaveform = m_pClientDE->ReadFromMessageByte(hMessage);
light.fRadiusFreq = m_pClientDE->ReadFromMessageFloat(hMessage);
light.fRadiusPhase = m_pClientDE->ReadFromMessageFloat(hMessage);
light.hstrRampUpSound = m_pClientDE->ReadFromMessageHString(hMessage);
light.hstrRampDownSound = m_pClientDE->ReadFromMessageHString(hMessage);
CreateSFX(nId, &light);
}
break;
case SFX_WEAPONPOWERUP_ID :
{
WEAPPOWERCREATESTRUCT weap;
weap.hServerObj = hObj;
weap.hGun = m_pClientDE->ReadFromMessageObject(hMessage);
m_pClientDE->ReadFromMessageVector(hMessage, &(weap.vPosOffset));
m_pClientDE->ReadFromMessageVector(hMessage, &(weap.vScale));
weap.fLifeTime = m_pClientDE->ReadFromMessageFloat(hMessage);
weap.fInitAlpha = m_pClientDE->ReadFromMessageFloat(hMessage);
weap.bFade = m_pClientDE->ReadFromMessageByte(hMessage);
weap.pSpriteFile = m_pClientDE->ReadFromMessageHString(hMessage);
CreateSFX(nId, &weap);
}
break;
case SFX_PARTICLESTREAM_ID :
{
PSTREAMCREATESTRUCT ps;
ps.hServerObj = hObj;
ps.fRadius = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.fPosRadius = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.fMinVel = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.fMaxVel = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.nNumParticles= m_pClientDE->ReadFromMessageDWord(hMessage);
ps.fSpread = m_pClientDE->ReadFromMessageFloat(hMessage);
m_pClientDE->ReadFromMessageVector(hMessage, &(ps.vColor1));
m_pClientDE->ReadFromMessageVector(hMessage, &(ps.vColor2));
ps.fAlpha = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.fMinLife = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.fMaxLife = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.fRampTime = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.fDelay = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.fGravity = m_pClientDE->ReadFromMessageFloat(hMessage);
ps.bRampFlags = m_pClientDE->ReadFromMessageByte(hMessage);
ps.bOn = m_pClientDE->ReadFromMessageByte(hMessage);
ps.hstrTexture = m_pClientDE->ReadFromMessageHString(hMessage);
CreateSFX(nId, &ps);
}
break;
case SFX_LIGHTNING_ID :
{
LIGHTNINGCREATESTRUCT lcs;
lcs.hServerObj = hObj;
m_pClientDE->ReadFromMessageVector(hMessage, &(lcs.vSource));
m_pClientDE->ReadFromMessageVector(hMessage, &(lcs.vDest));
lcs.nShape = m_pClientDE->ReadFromMessageByte(hMessage);
lcs.nForm = m_pClientDE->ReadFromMessageByte(hMessage);
lcs.nType = m_pClientDE->ReadFromMessageByte(hMessage);
CreateSFX(nId, &lcs);
}
break;
case SFX_LASERBEAM_ID :
{
LASERBEAMCREATESTRUCT lbcs;
lbcs.hServerObj = hObj;
m_pClientDE->ReadFromMessageVector(hMessage, &(lbcs.vSource));
m_pClientDE->ReadFromMessageVector(hMessage, &(lbcs.vDest));
lbcs.nType = m_pClientDE->ReadFromMessageByte(hMessage);
CreateSFX(nId, &lbcs);
}
break;
case SFX_WARPGATESPRITE_ID :
{
WARPGATESPRITECS wgSpr;
wgSpr.hServerObj = hObj;
wgSpr.hObj = m_pClientDE->ReadFromMessageObject(hMessage);
wgSpr.fRampUpTime = m_pClientDE->ReadFromMessageFloat(hMessage);
wgSpr.fRampDownTime = m_pClientDE->ReadFromMessageFloat(hMessage);
wgSpr.fMinScale = m_pClientDE->ReadFromMessageFloat(hMessage);
wgSpr.fMaxScale = m_pClientDE->ReadFromMessageFloat(hMessage);
wgSpr.fAlpha = m_pClientDE->ReadFromMessageFloat(hMessage);
wgSpr.nRampUpType = m_pClientDE->ReadFromMessageDWord(hMessage);
wgSpr.nRampDownType = m_pClientDE->ReadFromMessageDWord(hMessage);
wgSpr.bAlign = m_pClientDE->ReadFromMessageByte(hMessage);
wgSpr.szSprite = m_pClientDE->ReadFromMessageHString(hMessage);
CreateSFX(nId, &wgSpr);
}
break;
case SFX_WARPGATEPARTICLE_ID :
{
WARPGATEPARTICLECS wgPS;
wgPS.hServerObj = hObj;
wgPS.hObj = m_pClientDE->ReadFromMessageObject(hMessage);
wgPS.fRampUpTime = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.fRampDownTime = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.fSystemRadius = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.fPosRadius = m_pClientDE->ReadFromMessageFloat(hMessage);
m_pClientDE->ReadFromMessageVector(hMessage, &wgPS.vOffset);
m_pClientDE->ReadFromMessageVector(hMessage, &wgPS.vRotations);
wgPS.fMinVelocity = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.fMaxVelocity = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.nNumParticles = m_pClientDE->ReadFromMessageDWord(hMessage);
wgPS.nEmitType = m_pClientDE->ReadFromMessageDWord(hMessage);
m_pClientDE->ReadFromMessageVector(hMessage, &wgPS.vMinColor);
m_pClientDE->ReadFromMessageVector(hMessage, &wgPS.vMaxColor);
wgPS.fAlpha = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.fMinLifetime = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.fMaxLifetime = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.fAddDelay = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.fGravity = m_pClientDE->ReadFromMessageFloat(hMessage);
wgPS.nRampUpType = m_pClientDE->ReadFromMessageDWord(hMessage);
wgPS.nRampDownType = m_pClientDE->ReadFromMessageDWord(hMessage);
wgPS.bAlign = m_pClientDE->ReadFromMessageByte(hMessage);
wgPS.szParticle = m_pClientDE->ReadFromMessageHString(hMessage);
CreateSFX(nId, &wgPS);
}
break;
case SFX_OBJECTFX_ID :
{
OBJECTFXCS ofx;
ofx.hServerObj = DNULL;
ofx.hObj = m_pClientDE->ReadFromMessageObject(hMessage);
m_pClientDE->ReadFromMessageVector(hMessage, &ofx.vOffset);
ofx.fScale = m_pClientDE->ReadFromMessageFloat(hMessage);
ofx.nScaleFlags = m_pClientDE->ReadFromMessageDWord(hMessage);
ofx.nFXType = m_pClientDE->ReadFromMessageDWord(hMessage);
ofx.nFXFlags = m_pClientDE->ReadFromMessageDWord(hMessage);
if(hObj && !ofx.hObj)
ofx.hObj = hObj;
CreateSFX(nId, &ofx);
}
break;
case SFX_POWERUP_ID :
{
PICKUPOBJCREATESTRUCT pobj;
pobj.hServerObj = hObj;
CreateSFX(nId, &pobj);
}
break;
case SFX_FLASHLIGHT_ID :
{
FLASHLIGHTCREATESTRUCT fobj;
fobj.hServerObj = hObj;
CreateSFX(nId, &fobj);
}
break;
case SFX_PARTICLEEXPLOSION_ID:
{
char* szBlood[4] = { "spritetextures\\particles\\blooddrop_1.dtx",
"spritetextures\\particles\\blooddrop_2.dtx",
"spritetextures\\particles\\blooddrop_3.dtx",
"spritetextures\\particles\\blooddrop_4.dtx"};
PESCREATESTRUCT pe;
DVector vDir;
m_pClientDE->ReadFromMessageVector(hMessage, &(pe.vPos));
m_pClientDE->ReadFromMessageCompVector(hMessage, &vDir);
VEC_MULSCALAR(pe.vMinVel, vDir, 0.6f);
VEC_MULSCALAR(pe.vMaxVel, vDir, 0.6f);
VEC_SET(pe.vColor1, 128.0f, 128.0f, 128.0f);
VEC_SET(pe.vColor2, 128.0f, 128.0f, 128.0f);
VEC_SET(pe.vMinDriftOffset, 0.0f, -10.0f, 0.0f);
VEC_SET(pe.vMaxDriftOffset, 0.0f, -5.0f, 0.0f);
pe.bSmall = DFALSE;
pe.fLifeTime = 2.0f;
pe.fFadeTime = 0.5f;
pe.fOffsetTime = 0.0f;
pe.fRadius = 200.0f;
pe.fGravity = -100.0f;
pe.nNumPerPuff = 2;
pe.nNumEmitters = 1; //GetRandom(1,4);
pe.nEmitterFlags = MO_HALFGRAVITY;
pe.bIgnoreWind = DTRUE;
pe.pFilename = szBlood[GetRandom(0,2)];
pe.nSurfaceType = SURFTYPE_FLESH;
pe.nNumSteps = 6;
pe.bBounce = DFALSE;
CreateSFX(nId, &pe);
}
break;
#ifdef _ADD_ON
case SFX_FLAYER_CHAIN_ID :
{
IKCHAINCS ccs;
ccs.hServerObj = hObj;
ccs.byNumLinks = m_pClientDE->ReadFromMessageByte(hMessage);
ccs.fScale = m_pClientDE->ReadFromMessageFloat(hMessage);
ccs.fTime = m_pClientDE->ReadFromMessageFloat(hMessage);
ccs.byFXType = m_pClientDE->ReadFromMessageByte(hMessage);
ccs.byFXFlags = m_pClientDE->ReadFromMessageByte(hMessage);
CreateSFX(nId, &ccs);
}
break;
#endif
default : break;
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CSFXMgr::CreateSFX()
//
// PURPOSE: Create the special fx
//
// ----------------------------------------------------------------------- //
CSpecialFX* CSFXMgr::CreateSFX(DBYTE nId, SFXCREATESTRUCT *psfxCreateStruct, DBOOL bStatic, CSpecialFX* pParentFX)
{
if (!m_pClientDE) return DNULL;
CSpecialFX* pSFX = DNULL;
switch(nId)
{
case SFX_POLYGRID_ID :
{
pSFX = new CPolyGridFX();
}
break;
case SFX_SMOKETRAIL_ID :
{
pSFX = new CSmokeTrailFX();
}
break;
case SFX_SMOKETRAILSEG_ID :
{
pSFX = new CSmokeTrailSegmentFX();
}
break;
case SFX_PARTICLESYSTEM_ID :
{
pSFX = new CParticleSystemFX();
}
break;
case SFX_MARK_ID :
{
pSFX = new CMarkSFX();
}
break;
case SFX_WEAPON_ID :
{
pSFX = new CWeaponFX();
}
break;
case SFX_TRACER_ID :
{
pSFX = new CTracerFX();
}
break;
case SFX_DEBUGLINE_ID:
{
pSFX = new CDebugLine();
}
break;
case SFX_RAIN_ID :
{
pSFX = new CRainFX();
}
break;
case SFX_SPARKS_ID :
{
pSFX = new CSparksFX();
}
break;
case SFX_CASTLINE_ID :
{
pSFX = new CCastLineFX();
}
break;
case SFX_VOLUMEBRUSH_ID:
{
pSFX = new CVolumeBrushFX();
}
break;
//SCHLEGZ 5/21/98 1:42:00 PM: new blood trail effect
case SFX_BLOODTRAIL_ID :
{
pSFX = new CBloodTrailFX();
}
break;
case SFX_BLOODTRAILSEG_ID :
{
pSFX = new CBloodTrailSegmentFX();
}
break;
case SFX_BLOODSPLAT_ID :
{
pSFX = new CBloodSplatFX();
}
break;
case SFX_GIB_ID:
{
pSFX = new CGibFX();
}
break;
case SFX_PARTICLEEXPLOSION_ID:
{
pSFX = new CParticleExplosionFX();
}
break;
case SFX_SMOKEPUFF_ID :
{
pSFX = new CSmokePuffFX();
}
break;
// ANDY 6/17/98 12:42pm Just made a new one as to not change the old one
case SFX_SMOKEIMPACT_ID :
{
pSFX = new CSmokeImpactFX();
}
break;
case SFX_FRAGMENTS_ID :
{
pSFX = new CSurfaceFragmentFX();
}
break;
case SFX_SPLASH_ID :
{
pSFX = new CSplashFX();
}
break;
case SFX_RIPPLE_ID :
{
pSFX = new CRippleFX();
}
break;
case SFX_EXPLOSION_ID :
{
pSFX = new CExplosionModelFX();
}
break;
case SFX_EXPLOSIONSPRITE_ID :
{
pSFX = new CExplosionSpriteFX();
}
break;
case SFX_EXPLOSIONRING_ID :
{
pSFX = new CExplosionRingFX();
}
break;
case SFX_EXPLOSIONFLAME_ID :
{
pSFX = new CExplosionFlameFX();
}
break;
case SFX_EXPLOSIONWAVE_ID :
{
pSFX = new CExplosionWaveFX();
}
break;
case SFX_EXPLOSIONLIGHT_ID :
{
pSFX = new CExplosionLightFX();
}
break;
case SFX_EXPLOSIONFRAG_ID :
{
pSFX = new CExplosionFragFX();
}
break;
case SFX_EXPLOSIONFX_ID :
{
pSFX = new CExplosionFX();
}
break;
case SFX_CAMERA_ID :
{
pSFX = new CCameraFX();
// Put the camera in a special list
if (pSFX)
{
if (pSFX->Init(psfxCreateStruct))
{
if (m_pClientDE->IsConnected())
{
pSFX->CreateObject(m_pClientDE);
m_cameraSFXList.Add(pSFX);
}
else
{
delete pSFX;
pSFX = DNULL;
}
}
}
return pSFX;
}
break;
case SFX_LIGHT_ID :
{
pSFX = new CLightFX();
}
break;
case SFX_WEAPONPOWERUP_ID :
{
pSFX = new CWeaponPowerupFX();
}
break;
case SFX_PARTICLESTREAM_ID :
{
pSFX = new CParticleStreamFX();
}
break;
case SFX_LIGHTNING_ID :
{
pSFX = new CLightningBoltFX();
}
break;
case SFX_LIGHTNINGSEG_ID :
{
pSFX = new CLightningSegmentFX();
}
break;
case SFX_LASERBEAM_ID :
{
pSFX = new CLaserBeamFX();
}
break;
case SFX_WARPGATESPRITE_ID :
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -