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

📄 clientwarpgatesfx.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			g_pServerDE->SetObjectUserFlags(m_hObject, dwUsrFlags);
			bFirstUpdate = 1;
 			break;
		}

		case MID_UPDATE:
		{
			if(bFirstUpdate)	{ SetupFX(); bFirstUpdate = 0; }

			DDWORD dwUsrFlags = g_pServerDE->GetObjectUserFlags(m_hObject);
			if(bOn)		dwUsrFlags |= USRFLG_VISIBLE;
				else	dwUsrFlags &= ~USRFLG_VISIBLE;
			g_pServerDE->SetObjectUserFlags(m_hObject, dwUsrFlags);

			pServerDE->SetNextUpdate(m_hObject, 0.1f);
		    if(!pServerDE) pServerDE->RemoveObject(m_hObject);
			break;
		}

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

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

		default : break;
	}

	return CClientSFX::EngineMessageFn(messageID, pData, fData);
}

// ----------------------------------------------------------------------- //

void CClientWarpGateSFX::ReadProp(ObjectCreateStruct *pData)
{
	CServerDE* pServerDE = GetServerDE();
	if(!pServerDE || !pData) return;

	char		szString[MAX_CS_FILENAME_LEN];
	long		tempLong;

	if (wSpr.hstrSprite)	// [blg]
	{
		g_pServerDE->FreeString(wSpr.hstrSprite);
	}

	if (wPS1.hstrParticle)	// [blg]
	{
		g_pServerDE->FreeString(wPS1.hstrParticle);
	}

	if (wPS2.hstrParticle)	// [blg]
	{
		g_pServerDE->FreeString(wPS2.hstrParticle);
	}

	pServerDE->GetPropReal("RampUpTime", &fRampUpTime);
	pServerDE->GetPropReal("RampDownTime", &fRampDownTime);
	pServerDE->GetPropBool("InitiallyOn", &bOn);

	pServerDE->GetPropReal("SpriteMinScale", &wSpr.fMinScale);
	pServerDE->GetPropReal("SpriteMaxScale", &wSpr.fMaxScale);
	pServerDE->GetPropReal("SpriteAlpha", &wSpr.fAlpha);
	pServerDE->GetPropLongInt("SpriteRampUpType", &tempLong);
	wSpr.nRampUpType = (DDWORD)tempLong;
	pServerDE->GetPropLongInt("SpriteRampDownType", &tempLong);
	wSpr.nRampDownType = (DDWORD)tempLong;
	pServerDE->GetPropBool("SpriteAlign", &wSpr.bAlign);
	pServerDE->GetPropString("SpriteFile", szString, MAX_CS_FILENAME_LEN);
	wSpr.hstrSprite = pServerDE->CreateString(szString);

	pServerDE->GetPropReal("PS1SystemRadius", &wPS1.fSystemRadius);
	pServerDE->GetPropReal("PS1PositionRadius", &wPS1.fPosRadius);
	pServerDE->GetPropVector("PS1Offset", &wPS1.vOffset);
	pServerDE->GetPropVector("PS1Rotations", &wPS1.vRotations);
	pServerDE->GetPropReal("PS1MinVelocity", &wPS1.fMinVelocity);
	pServerDE->GetPropReal("PS1MaxVelocity", &wPS1.fMaxVelocity);
	pServerDE->GetPropLongInt("PS1NumParticles", &tempLong);
	wPS1.nNumParticles = (DDWORD)tempLong;
	pServerDE->GetPropLongInt("PS1EmitType", &tempLong);
	wPS1.nEmitType = (DDWORD)tempLong;
	pServerDE->GetPropColor("PS1MinColor", &wPS1.vMinColor);
	pServerDE->GetPropColor("PS1MaxColor", &wPS1.vMaxColor);
	pServerDE->GetPropReal("PS1SystemAlpha", &wPS1.fAlpha);
	pServerDE->GetPropReal("PS1MinLifetime", &wPS1.fMinLifetime);
	pServerDE->GetPropReal("PS1MaxLifetime", &wPS1.fMaxLifetime);
	pServerDE->GetPropReal("PS1AddDelay", &wPS1.fAddDelay);
	pServerDE->GetPropReal("PS1Gravity", &wPS1.fGravity);
	pServerDE->GetPropLongInt("PS1RampUpType", &tempLong);
	wPS1.nRampUpType = (DDWORD)tempLong;
	pServerDE->GetPropLongInt("PS1RampDownType", &tempLong);
	wPS1.nRampDownType = (DDWORD)tempLong;
	pServerDE->GetPropBool("PS1Align", &wPS1.bAlign);
	pServerDE->GetPropString("PS1ParticleFile", szString, MAX_CS_FILENAME_LEN);
	wPS1.hstrParticle = pServerDE->CreateString(szString);

	pServerDE->GetPropReal("PS2SystemRadius", &wPS2.fSystemRadius);
	pServerDE->GetPropReal("PS2PositionRadius", &wPS2.fPosRadius);
	pServerDE->GetPropVector("PS2Offset", &wPS2.vOffset);
	pServerDE->GetPropVector("PS2Rotations", &wPS2.vRotations);
	pServerDE->GetPropReal("PS2MinVelocity", &wPS2.fMinVelocity);
	pServerDE->GetPropReal("PS2MaxVelocity", &wPS2.fMaxVelocity);
	pServerDE->GetPropLongInt("PS2NumParticles", &tempLong);
	wPS2.nNumParticles = (DDWORD)tempLong;
	pServerDE->GetPropLongInt("PS2EmitType", &tempLong);
	wPS2.nEmitType = (DDWORD)tempLong;
	pServerDE->GetPropColor("PS2MinColor", &wPS2.vMinColor);
	pServerDE->GetPropColor("PS2MaxColor", &wPS2.vMaxColor);
	pServerDE->GetPropReal("PS2SystemAlpha", &wPS2.fAlpha);
	pServerDE->GetPropReal("PS2MinLifetime", &wPS2.fMinLifetime);
	pServerDE->GetPropReal("PS2MaxLifetime", &wPS2.fMaxLifetime);
	pServerDE->GetPropReal("PS2AddDelay", &wPS2.fAddDelay);
	pServerDE->GetPropReal("PS2Gravity", &wPS2.fGravity);
	pServerDE->GetPropLongInt("PS2RampUpType", &tempLong);
	wPS2.nRampUpType = (DDWORD)tempLong;
	pServerDE->GetPropLongInt("PS2RampDownType", &tempLong);
	wPS2.nRampDownType = (DDWORD)tempLong;
	pServerDE->GetPropBool("PS2Align", &wPS2.bAlign);
	pServerDE->GetPropString("PS2ParticleFile", szString, MAX_CS_FILENAME_LEN);
	wPS2.hstrParticle = pServerDE->CreateString(szString);

	pServerDE->GetPropReal("SoundRadius", &fSoundRadius);
	pServerDE->GetPropString("RampUpSound", szString, MAX_CS_FILENAME_LEN);
	hstrSound1 = pServerDE->CreateString(szString);
	pServerDE->GetPropString("LoopSound", szString, MAX_CS_FILENAME_LEN);
	hstrSound2 = pServerDE->CreateString(szString);
	pServerDE->GetPropString("RampDownSound", szString, MAX_CS_FILENAME_LEN);
	hstrSound3 = pServerDE->CreateString(szString);
	return;
}

// ----------------------------------------------------------------------- //

void CClientWarpGateSFX::HandleTrigger(HOBJECT hSender, HMESSAGEREAD hRead)
{
	HSTRING hMsg = g_pServerDE->ReadFromMessageHString(hRead);
	char *pszMessage = g_pServerDE->GetStringData(hMsg);
	DDWORD dwUsrFlags = g_pServerDE->GetObjectUserFlags(m_hObject);

    if( _mbsncmp((const unsigned char*)pszMessage, (const unsigned char*)"TOGGLE", 6) == 0)
		bOn = !bOn;
    else if( _mbsncmp((const unsigned char*)pszMessage, (const unsigned char*)"ON", 2) == 0)
		bOn = DTRUE;
    else if( _mbsncmp((const unsigned char*)pszMessage, (const unsigned char*)"OFF", 3) == 0)
		bOn = DFALSE;
    
	g_pServerDE->SetObjectUserFlags(m_hObject, dwUsrFlags);
	g_pServerDE->FreeString(hMsg);
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CClientWarpGateSFX::Save
//
//	PURPOSE:	Save the object
//
// ----------------------------------------------------------------------- //

void CClientWarpGateSFX::Save(HMESSAGEWRITE hWrite, DDWORD dwSaveFlags)
{
	CServerDE* pServerDE = BaseClass::GetServerDE();
	if (!pServerDE || !hWrite) return;

	pServerDE->WriteToMessageFloat(hWrite, fRampUpTime);
	pServerDE->WriteToMessageFloat(hWrite, fRampDownTime);
	pServerDE->WriteToMessageByte(hWrite, bInitiallyOn);

	pServerDE->WriteToMessageFloat(hWrite, wSpr.fMinScale);
	pServerDE->WriteToMessageFloat(hWrite, wSpr.fMaxScale);
	pServerDE->WriteToMessageFloat(hWrite, wSpr.fAlpha);
	pServerDE->WriteToMessageDWord(hWrite, wSpr.nRampUpType);
	pServerDE->WriteToMessageDWord(hWrite, wSpr.nRampDownType);
	pServerDE->WriteToMessageByte(hWrite, wSpr.bAlign);
	pServerDE->WriteToMessageHString(hWrite, wSpr.hstrSprite);

	pServerDE->WriteToMessageFloat(hWrite, wPS1.fSystemRadius);
	pServerDE->WriteToMessageFloat(hWrite, wPS1.fPosRadius);
	pServerDE->WriteToMessageVector(hWrite, &wPS1.vOffset);
	pServerDE->WriteToMessageVector(hWrite, &wPS1.vRotations);

	pServerDE->WriteToMessageFloat(hWrite, wPS1.fMinVelocity);
	pServerDE->WriteToMessageFloat(hWrite, wPS1.fMaxVelocity);
	pServerDE->WriteToMessageDWord(hWrite, wPS1.nNumParticles);
	pServerDE->WriteToMessageDWord(hWrite, wPS1.nEmitType);
	pServerDE->WriteToMessageVector(hWrite, &wPS1.vMinColor);
	pServerDE->WriteToMessageVector(hWrite, &wPS1.vMaxColor);
	pServerDE->WriteToMessageFloat(hWrite, wPS1.fAlpha);
	pServerDE->WriteToMessageFloat(hWrite, wPS1.fMinLifetime);
	pServerDE->WriteToMessageFloat(hWrite, wPS1.fMaxLifetime);
	pServerDE->WriteToMessageFloat(hWrite, wPS1.fAddDelay);
	pServerDE->WriteToMessageFloat(hWrite, wPS1.fGravity);
	pServerDE->WriteToMessageDWord(hWrite, wPS1.nRampUpType);
	pServerDE->WriteToMessageDWord(hWrite, wPS1.nRampDownType);
	pServerDE->WriteToMessageByte(hWrite, wPS1.bAlign);
	pServerDE->WriteToMessageHString(hWrite, wPS1.hstrParticle);

	pServerDE->WriteToMessageFloat(hWrite, wPS2.fSystemRadius);
	pServerDE->WriteToMessageFloat(hWrite, wPS2.fPosRadius);
	pServerDE->WriteToMessageVector(hWrite, &wPS2.vOffset);
	pServerDE->WriteToMessageVector(hWrite, &wPS2.vRotations);

	pServerDE->WriteToMessageFloat(hWrite, wPS2.fMinVelocity);
	pServerDE->WriteToMessageFloat(hWrite, wPS2.fMaxVelocity);
	pServerDE->WriteToMessageDWord(hWrite, wPS2.nNumParticles);
	pServerDE->WriteToMessageDWord(hWrite, wPS2.nEmitType);
	pServerDE->WriteToMessageVector(hWrite, &wPS2.vMinColor);
	pServerDE->WriteToMessageVector(hWrite, &wPS2.vMaxColor);
	pServerDE->WriteToMessageFloat(hWrite, wPS2.fAlpha);
	pServerDE->WriteToMessageFloat(hWrite, wPS2.fMinLifetime);
	pServerDE->WriteToMessageFloat(hWrite, wPS2.fMaxLifetime);
	pServerDE->WriteToMessageFloat(hWrite, wPS2.fAddDelay);
	pServerDE->WriteToMessageFloat(hWrite, wPS2.fGravity);
	pServerDE->WriteToMessageDWord(hWrite, wPS2.nRampUpType);
	pServerDE->WriteToMessageDWord(hWrite, wPS2.nRampDownType);
	pServerDE->WriteToMessageByte(hWrite, wPS2.bAlign);
	pServerDE->WriteToMessageHString(hWrite, wPS2.hstrParticle);

	pServerDE->WriteToMessageFloat(hWrite, fSoundRadius);
	pServerDE->WriteToMessageHString(hWrite, hstrSound1);
	pServerDE->WriteToMessageHString(hWrite, hstrSound2);
	pServerDE->WriteToMessageHString(hWrite, hstrSound3);

	pServerDE->WriteToMessageByte(hWrite, bOn);
	pServerDE->WriteToMessageByte(hWrite, bFirstUpdate);
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CClientWarpGateSFX::Load
//
//	PURPOSE:	Load the object
//
// ----------------------------------------------------------------------- //

void CClientWarpGateSFX::Load(HMESSAGEREAD hRead, DDWORD dwLoadFlags)
{
	CServerDE* pServerDE = BaseClass::GetServerDE();
	if (!pServerDE || !hRead) return;

	fRampUpTime			= pServerDE->ReadFromMessageFloat(hRead);
	fRampDownTime		= pServerDE->ReadFromMessageFloat(hRead);
	bInitiallyOn		= pServerDE->ReadFromMessageByte(hRead);

	wSpr.fMinScale		= pServerDE->ReadFromMessageFloat(hRead);
	wSpr.fMaxScale		= pServerDE->ReadFromMessageFloat(hRead);
	wSpr.fAlpha			= pServerDE->ReadFromMessageFloat(hRead);
	wSpr.nRampUpType	= pServerDE->ReadFromMessageDWord(hRead);
	wSpr.nRampDownType	= pServerDE->ReadFromMessageDWord(hRead);
	wSpr.bAlign			= pServerDE->ReadFromMessageByte(hRead);
	wSpr.hstrSprite		= pServerDE->ReadFromMessageHString(hRead);

	wPS1.fSystemRadius	= pServerDE->ReadFromMessageFloat(hRead);
	wPS1.fPosRadius		= pServerDE->ReadFromMessageFloat(hRead);
	pServerDE->ReadFromMessageVector(hRead, &wPS1.vOffset);
	pServerDE->ReadFromMessageVector(hRead, &wPS1.vRotations);

	wPS1.fMinVelocity	= pServerDE->ReadFromMessageFloat(hRead);
	wPS1.fMaxVelocity	= pServerDE->ReadFromMessageFloat(hRead);
	wPS1.nNumParticles	= pServerDE->ReadFromMessageDWord(hRead);
	wPS1.nEmitType		= pServerDE->ReadFromMessageDWord(hRead);
	pServerDE->ReadFromMessageVector(hRead, &wPS1.vMinColor);
	pServerDE->ReadFromMessageVector(hRead, &wPS1.vMaxColor);
	wPS1.fAlpha			= pServerDE->ReadFromMessageFloat(hRead);
	wPS1.fMinLifetime	= pServerDE->ReadFromMessageFloat(hRead);
	wPS1.fMaxLifetime	= pServerDE->ReadFromMessageFloat(hRead);
	wPS1.fAddDelay		= pServerDE->ReadFromMessageFloat(hRead);
	wPS1.fGravity		= pServerDE->ReadFromMessageFloat(hRead);
	wPS1.nRampUpType	= pServerDE->ReadFromMessageDWord(hRead);
	wPS1.nRampDownType	= pServerDE->ReadFromMessageDWord(hRead);
	wPS1.bAlign			= pServerDE->ReadFromMessageByte(hRead);
	wPS1.hstrParticle	= pServerDE->ReadFromMessageHString(hRead);

	wPS2.fSystemRadius	= pServerDE->ReadFromMessageFloat(hRead);
	wPS2.fPosRadius		= pServerDE->ReadFromMessageFloat(hRead);
	pServerDE->ReadFromMessageVector(hRead, &wPS2.vOffset);
	pServerDE->ReadFromMessageVector(hRead, &wPS2.vRotations);

	wPS2.fMinVelocity	= pServerDE->ReadFromMessageFloat(hRead);
	wPS2.fMaxVelocity	= pServerDE->ReadFromMessageFloat(hRead);
	wPS2.nNumParticles	= pServerDE->ReadFromMessageDWord(hRead);
	wPS2.nEmitType		= pServerDE->ReadFromMessageDWord(hRead);
	pServerDE->ReadFromMessageVector(hRead, &wPS2.vMinColor);
	pServerDE->ReadFromMessageVector(hRead, &wPS2.vMaxColor);
	wPS2.fAlpha			= pServerDE->ReadFromMessageFloat(hRead);
	wPS2.fMinLifetime	= pServerDE->ReadFromMessageFloat(hRead);
	wPS2.fMaxLifetime	= pServerDE->ReadFromMessageFloat(hRead);
	wPS2.fAddDelay		= pServerDE->ReadFromMessageFloat(hRead);
	wPS2.fGravity		= pServerDE->ReadFromMessageFloat(hRead);
	wPS2.nRampUpType	= pServerDE->ReadFromMessageDWord(hRead);
	wPS2.nRampDownType	= pServerDE->ReadFromMessageDWord(hRead);
	wPS2.bAlign			= pServerDE->ReadFromMessageByte(hRead);
	wPS2.hstrParticle	= pServerDE->ReadFromMessageHString(hRead);

	fSoundRadius		= pServerDE->ReadFromMessageFloat(hRead);
	hstrSound1			= pServerDE->ReadFromMessageHString(hRead);
	hstrSound2			= pServerDE->ReadFromMessageHString(hRead);
	hstrSound3			= pServerDE->ReadFromMessageHString(hRead);

	bOn					= pServerDE->ReadFromMessageByte(hRead);
	bFirstUpdate		= pServerDE->ReadFromMessageByte(hRead);
}

⌨️ 快捷键说明

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