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

📄 lighteffectunit.cpp

📁 墨香最新私服
💻 CPP
字号:
// LightEffectUnit.cpp: implementation of the CLightEffectUnit class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "LightEffectUnit.h"
#include "LightEffectUnitDesc.h"
#include "..\Object.h"
#include "EffectTriggerMoveUnitDesc.h"

#include "GameResourceManager.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

float LIGHTING_CLOSING_TIME = 100;

CLightEffectUnit::CLightEffectUnit()
{
}

CLightEffectUnit::~CLightEffectUnit()
{
}

void CLightEffectUnit::Initialize(CEffectUnitDesc* pEffectUnitDesc,EFFECTPARAM* pEffectParam)
{
	m_pLight = NULL;
	m_bIsMoving = FALSE;
	m_bIsClosing = FALSE;

	CEffectUnit::Initialize(pEffectUnitDesc,pEffectParam);
}
void CLightEffectUnit::Release()
{
	if(m_pLight)
	{
		delete m_pLight;
		m_pLight = NULL;
	}
	
	CLightEffectUnitDesc::ReleaseUnit(this);
}

void CLightEffectUnit::DoOn(EFFECTPARAM* pParam,TARGETSET* pObject)
{
	CLightEffectUnitDesc* pDesc = (CLightEffectUnitDesc*)m_pEffectUnitDesc;

#ifdef _TESTCLIENT_
	if(GAMERESRCMNGR->m_TestClientInfo.LightEffect == 0)
		return;
#endif

	if(m_pLight == NULL)
		m_pLight = new CEngineLight;

	VECTOR3 pos;
	GetEffectStartPosition(&pos,pObject->pTarget,pParam);

	m_pLight->InitNormalLight(pDesc->m_ColorIndex,pDesc->m_fRadius,&pos);
	
	m_bIsClosing = FALSE;
}
void CLightEffectUnit::DoOff(EFFECTPARAM* pParam,TARGETSET* pObject)
{
	if(m_pLight == NULL)
	{

	}
	else
	{
		m_dwCloseTime = gCurTime;
		m_bIsClosing = TRUE;
	}
}
void CLightEffectUnit::DoMove(EFFECTPARAM* pParam,TARGETSET* pObject,CEffectTriggerMoveUnitDesc* pMoveDesc)
{
	CLightEffectUnitDesc* pDesc = (CLightEffectUnitDesc*)m_pEffectUnitDesc;

	VECTOR3 pos,cpos;
	VRand(&pos,&pMoveDesc->m_ToPosition,&pMoveDesc->m_ToRandom);	// 罚待 蔼俊 蝶扼 炼沥秦淋
	
	if(pDesc->m_bRelatedCoordinate)		// 惑措 谅钎肺 函券
	{
		float angle = pObject->pTarget->GetAngle();
		TransToRelatedCoordinate(&pos,&pos,angle);
	}

	pObject->pTarget->GetPosition(&cpos);
	m_TargetPos = cpos + pos;
	

	VECTOR3 dir = m_TargetPos - m_CurPosition;
	m_MoveDirection = dir / float(pMoveDesc->m_MoveTime);
	m_EstimatedTime = pMoveDesc->m_MoveTime;

	m_bIsMoving = TRUE;
}

void CLightEffectUnit::DoAttach(EFFECTPARAM* pParam,TARGETSET* pObject,char* AttachPartName)
{
	CLightEffectUnitDesc* pDesc = (CLightEffectUnitDesc*)m_pEffectUnitDesc;

	m_pLight->AttachToObject(pObject->pTarget->GetEngineObject(),AttachPartName);
}

void CLightEffectUnit::DoDetach(EFFECTPARAM* pParam,TARGETSET* pObject)
{
	CLightEffectUnitDesc* pDesc = (CLightEffectUnitDesc*)m_pEffectUnitDesc;
	
	m_pLight->DetachFromObject(pObject->pTarget->GetEngineObject());
}

void CLightEffectUnit::DoProcess(DWORD tickTime,EFFECTPARAM* pParam)
{
	CLightEffectUnitDesc* pDesc = (CLightEffectUnitDesc*)m_pEffectUnitDesc;

	if(m_bIsMoving)
	{
		if(m_EstimatedTime < tickTime)
		{
			m_CurPosition = m_TargetPos;
			m_bIsMoving = FALSE;
		}
		else
		{
			m_CurPosition = m_CurPosition + (m_MoveDirection * float(tickTime));
			m_EstimatedTime -= tickTime;
		}
		

		if(m_pLight)
			m_pLight->SetPosition(&m_CurPosition);
	}

	if(m_bIsClosing)
	{
		DWORD ElapTime = gCurTime - m_dwCloseTime;
		if(ElapTime > LIGHTING_CLOSING_TIME)
		{
			m_bIsClosing = FALSE;
			if(m_pLight)
			{
				m_pLight->Release();
				m_pLight = NULL;
			}
		}
		else
		{
			float rate = 1- ElapTime / float(LIGHTING_CLOSING_TIME);
			float radius = rate * pDesc->m_fRadius;
			if(m_pLight)
				m_pLight->SetRadius(radius);
		}

	}
}

⌨️ 快捷键说明

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