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

📄 sfxmgr.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			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 + -