📄 triplaserfx.cpp
字号:
// ----------------------------------------------------------------------- //
//
// MODULE : TripLaserFX.cpp
//
// PURPOSE : TripLaser special FX - Implementation
//
// CREATED : 10/21/97
//
// ----------------------------------------------------------------------- //
#include "TripLaserFX.h"
#include "cpp_client_de.h"
#include "ClientUtilities.h"
#include "ViewWeapon.h"
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTripLaserFX::Init
//
// PURPOSE: Init the Laser trail
//
// ----------------------------------------------------------------------- //
DBOOL CTripLaserFX::Init(SFXCREATESTRUCT* psfxCreateStruct)
{
if (!CBaseLineSystemFX::Init(psfxCreateStruct)) return DFALSE;
TRIPLASERCREATESTRUCT* pLaser = (TRIPLASERCREATESTRUCT*)psfxCreateStruct;
m_fLength = pLaser->fLength;
VEC_COPY(m_vColor, pLaser->vColor);
m_bTriggered = pLaser->bTriggered;
m_bFirstUpdate = DTRUE;
return DTRUE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTripLaserFX::Update
//
// PURPOSE: Update the Laser trail (add Laser)
//
// ----------------------------------------------------------------------- //
DBOOL CTripLaserFX::Update()
{
if(!m_hObject || !m_pClientDE || !m_hServerObject) return DFALSE;
if (m_bWantRemove || !m_bTriggered)
{
return DFALSE;
}
DFLOAT fTime = m_pClientDE->GetTime();
DVector vPos;
DRotation rRot;
m_pClientDE->GetObjectRotation(m_hServerObject, &rRot);
m_pClientDE->GetObjectPos(m_hServerObject, &vPos);
m_pClientDE->SetObjectRotation(m_hObject, &rRot);
m_pClientDE->SetObjectPos(m_hObject, &vPos);
// Cast a ray to find the end point...
DVector vStartPoint, vEndPoint;
// Really only want 1/2 the total distance...
DFLOAT fDistance = m_fLength / 2.0f;
VEC_SET(vEndPoint, 0.0f, 1.0f, 0.0f); // Z is straight ahead
VEC_MULSCALAR(vEndPoint, vEndPoint, fDistance);
VEC_SET(vStartPoint, 0.0f, -1.0f, 0.0f); // Z is straight behind
VEC_MULSCALAR(vStartPoint, vStartPoint, fDistance);
if (m_bFirstUpdate)
{
DELine line;
// Set start point
VEC_COPY(line.m_Points[0].m_Pos, vStartPoint);
line.m_Points[0].r = m_vColor.x;
line.m_Points[0].g = m_vColor.y;
line.m_Points[0].b = m_vColor.z;
line.m_Points[0].a = 0.5f;
// Set endpoint
VEC_COPY(line.m_Points[1].m_Pos, vEndPoint);
line.m_Points[1].r = m_vColor.x;
line.m_Points[1].g = m_vColor.y;
line.m_Points[1].b = m_vColor.z;
line.m_Points[1].a = 0.5f;
m_pClientDE->AddLine(m_hObject, &line);
m_fStartTime = fTime;
// m_bWantRemove = DTRUE;
m_bFirstUpdate = DFALSE;
}
return DTRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -