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

📄 weaponpowerupfx.cpp

📁 Blood 2全套源码
💻 CPP
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : WeaponPowerupFX.cpp
//
// PURPOSE : Weapon Powerup special FX - Implementation
//
// CREATED : 7/29/98
//
// ----------------------------------------------------------------------- //

#include "WeaponPowerupFX.h"
#include "cpp_client_de.h"
#include "ClientUtilities.h"
#include "ViewWeapon.h"
#include <mbstring.h>

// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CWeaponPowerupFX::Init
//
//	PURPOSE:	Init the powerup sprite
//
// ----------------------------------------------------------------------- //

DBOOL CWeaponPowerupFX::Init(SFXCREATESTRUCT* psfxCreateStruct)
{
	if (!psfxCreateStruct)		return	DFALSE;
	CSpecialFX::Init(psfxCreateStruct);
	WEAPPOWERCREATESTRUCT* pPowerup = (WEAPPOWERCREATESTRUCT*)psfxCreateStruct;
	
	m_hGun			= pPowerup->hGun;
	VEC_COPY(m_vPosOffset, pPowerup->vPosOffset);
	VEC_COPY(m_vScale, pPowerup->vScale);
	m_fLifeTime		= pPowerup->fLifeTime;
	m_fInitAlpha	= pPowerup->fInitAlpha;
	m_bFade			= pPowerup->bFade;
	m_pSpriteFile	= pPowerup->pSpriteFile;

	return DTRUE;
}

// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CWeaponPowerupFX::CreateObject
//
//	PURPOSE:	Create the sprite object
//
// ----------------------------------------------------------------------- //

DBOOL CWeaponPowerupFX::CreateObject(CClientDE* pClientDE)
{
	ObjectCreateStruct createStruct;
	INIT_OBJECTCREATESTRUCT(createStruct);
	m_pClientDE = pClientDE;

	// Setup the object creation structure
	createStruct.m_ObjectType = OT_SPRITE;
	createStruct.m_Flags = FLAG_VISIBLE | FLAG_SPRITECHROMAKEY;

	if(!m_pSpriteFile)
		_mbscpy((unsigned char*)createStruct.m_Filename, (const unsigned char*)"Sprites\\teslaAltM.spr");
	else
		_mbscpy((unsigned char*)createStruct.m_Filename, (const unsigned char*)pClientDE->GetStringData(m_pSpriteFile));

	if (m_hGun == g_hWeaponModel)
		m_pClientDE->GetObjectPos(m_hGun, &(createStruct.m_Pos));
	else
		m_pClientDE->GetObjectPos(m_hServerObject, &(createStruct.m_Pos));

	// Create the instance of the object
	m_hObject = pClientDE->CreateObject(&createStruct);

	// Scale the object to its initial settings
	pClientDE->SetObjectScale(m_hObject, &m_vScale);

	// Get the initial color values of the sprite
	DFLOAT	r, g, b, a;
	pClientDE->GetObjectColor(m_hObject, &r, &g, &b, &a);
	pClientDE->SetObjectColor(m_hObject, r, g, b, m_fInitAlpha);

	m_fStartTime = pClientDE->GetTime();
	return	DTRUE;
}

// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CWeaponPowerupFX::Update
//
//	PURPOSE:	Update the powerup sprite
//
// ----------------------------------------------------------------------- //

DBOOL CWeaponPowerupFX::Update()
{
	DVector vPos;
	DRotation rRot;

	if(m_pClientDE->GetTime() - m_fStartTime > m_fLifeTime)
		return	DFALSE;

	if (m_hGun == g_hWeaponModel)
	{
		DVector		vOffset, vU, vR, vF;

		ROT_COPY(rRot, g_rotGun)
		m_pClientDE->GetObjectPos(m_hGun, &vPos);
		m_pClientDE->GetRotationVectors(&rRot, &vU, &vR, &vF);

		VEC_COPY(vOffset, vPos)
		VEC_MULSCALAR(vU, vU, m_vPosOffset.y);
		VEC_MULSCALAR(vR, vR, m_vPosOffset.x);
		VEC_MULSCALAR(vF, vF, m_vPosOffset.z);

		VEC_ADD(vOffset, vOffset, vU);
		VEC_ADD(vOffset, vOffset, vR);
		VEC_ADD(vOffset, vOffset, vF);

		VEC_COPY(vPos, vOffset);
	}
	else
		m_pClientDE->GetObjectPos(m_hServerObject, &vPos);

	m_pClientDE->SetObjectPos(m_hObject, &vPos);

	return	DTRUE;
}

⌨️ 快捷键说明

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