Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
264 lines
7.5 KiB
C++
264 lines
7.5 KiB
C++
// hristmasParticleManager.cpp: implementation of the ChristmasParticleManager class.
|
||
//
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
#include "hristmasParticleManager.h"
|
||
#include "SceneManager.h"
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// Construction/Destruction
|
||
//////////////////////////////////////////////////////////////////////
|
||
const D3DXVECTOR3 g_ChristmasParticleColor[4] = {
|
||
D3DXVECTOR3(1.0f, 0.22f, 0.16f),
|
||
D3DXVECTOR3(0.05f, 0.38f,1.0f),
|
||
D3DXVECTOR3(0.07f,1.0f, 0.34f),
|
||
D3DXVECTOR3(1.0f, 0.83f,0.38f),
|
||
};
|
||
CChristmasParticleManager::CChristmasParticleManager()
|
||
{
|
||
m_iNodesNum = 0;
|
||
m_Nodes.clear();
|
||
|
||
}
|
||
|
||
CChristmasParticleManager::~CChristmasParticleManager()
|
||
{
|
||
for(int i = 0; i < m_Nodes.size(); i++ ) {
|
||
if(m_Nodes[i] != NULL) {
|
||
delete m_Nodes[i];
|
||
m_Nodes[i] = NULL;
|
||
}
|
||
}
|
||
m_Nodes.clear();
|
||
|
||
}
|
||
|
||
void CChristmasParticleManager::AddParticle(CChristmasParticle *pNode,float fX,float fY,float fZ) {
|
||
|
||
if(pNode != NULL) {
|
||
pNode->SetMaxLife(75.0f);
|
||
pNode->SetVisible(1.0f,0.0f);
|
||
pNode->SetBaseMass(1.2f);
|
||
pNode->SetFraction(0.0f);
|
||
pNode->SetGravity( 0.0f, -0.1f, 0.0f );
|
||
pNode->SetColor(1.0f,1.0f,1.0f,0.0f,0.0f,0.0f);
|
||
pNode->SetSize(4.0f,4.0f,4.0f,4.0f);
|
||
|
||
D3DXVECTOR3 vecCenter;
|
||
|
||
vector3 vecDir = CSceneManager::m_ViewCamera->GetViewTowardVector();
|
||
vecDir.Normalize();
|
||
|
||
|
||
vecCenter.x = fX + vecDir.x * 1500.0f;
|
||
vecCenter.y = fY + 100;//m_pChristmasParticle->m_fHeight;
|
||
|
||
vecCenter.z = fZ + vecDir.z * 1500.0f;
|
||
pNode->SetCenter(vecCenter.x,vecCenter.y,vecCenter.z);
|
||
|
||
m_Nodes.push_back(pNode);
|
||
m_iNodesNum = (int)m_Nodes.size();
|
||
}
|
||
}
|
||
void CChristmasParticleManager::DeleteEnd() {
|
||
int i;
|
||
for( i= (m_iNodesNum - 1); i >= 0; i-- ) {
|
||
if((m_Nodes[i] != NULL) && !m_Nodes[i]->m_bStart && m_Nodes[i]->GetEnd()) {
|
||
delete m_Nodes[i];
|
||
m_Nodes[i] = NULL;
|
||
m_Nodes.erase(&(m_Nodes[i]));
|
||
m_iNodesNum = (int)m_Nodes.size();
|
||
|
||
}
|
||
}
|
||
}
|
||
void CChristmasParticleManager::DeleteParticle(int iNum) {
|
||
if(m_iNodesNum <= iNum) {
|
||
return;
|
||
}
|
||
|
||
if(m_Nodes[iNum] != NULL) {
|
||
delete m_Nodes[iNum];
|
||
m_Nodes[iNum] = NULL;
|
||
|
||
}
|
||
m_Nodes.erase(&(m_Nodes[iNum]));
|
||
m_iNodesNum = (int)m_Nodes.size();
|
||
|
||
}
|
||
void CChristmasParticleManager::Render() {
|
||
|
||
int i;
|
||
for( i = 0; i < m_iNodesNum; i++ ) {
|
||
if(m_Nodes[i] != NULL) {
|
||
m_Nodes[i]->UpdateBuffer();
|
||
m_Nodes[i]->Render();
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
void CChristmasParticleManager::ProcessParticle() {
|
||
|
||
int i,j;
|
||
|
||
|
||
DWORD dwNowTime;
|
||
//_ftime(&NowTime);
|
||
dwNowTime = timeGetTime();
|
||
|
||
|
||
|
||
for( i = 0; i < m_iNodesNum; i++ ) {
|
||
float fDeltaTime = 0.0f;
|
||
int iSkipFrame = 1;
|
||
|
||
if(m_Nodes[i] == NULL)
|
||
continue;
|
||
|
||
if(m_Nodes[i]->m_bFirst != true) {
|
||
|
||
if( (dwNowTime - m_Nodes[i]->m_dwStartTime) >= 30) {//m_TickFrame) {
|
||
iSkipFrame =((int)(dwNowTime - m_Nodes[i]->m_dwStartTime)/ 30);
|
||
}
|
||
|
||
//fDeltaTime = static_cast<float>((NowTime.millitm - m_Nodes[i]->m_StartTime.millitm));
|
||
//iSkipFrame = (int)(fDeltaTime* 0.001f);
|
||
|
||
/*
|
||
if(iSkipFrame <= 0)
|
||
iSkipFrame = 1;
|
||
*/
|
||
}
|
||
for(j = 0; j < iSkipFrame; j++ ) {
|
||
if((m_Nodes[i]->m_bStart) && (m_Nodes[i]->m_fHeight < 500.0f)) {
|
||
m_Nodes[i]->m_fHeight += 20.0f;
|
||
|
||
}
|
||
if(m_Nodes[i]->m_bFirst == true) { // <20><> ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||
|
||
m_Nodes[i]->m_bFirst = false;
|
||
|
||
D3DXMATRIX matView,matInvView;
|
||
|
||
CSceneManager::GetDevice()->GetTransform(D3DTS_VIEW,&matView);
|
||
D3DXMatrixInverse(&matInvView,NULL,&matView);
|
||
D3DXVECTOR3 vecViewPos = D3DXVECTOR3(matInvView._41,matInvView._42,matInvView._43);
|
||
|
||
|
||
vector3 vecDir = CSceneManager::m_ViewCamera->GetViewTowardVector();
|
||
vecDir.Normalize();
|
||
vector3 vecUp = CSceneManager::m_ViewCamera->GetViewUpVector();
|
||
vecUp.Normalize();
|
||
|
||
vector3 vecCross = vecDir ^ vecUp;
|
||
vecCross.Normalize();
|
||
|
||
|
||
/*
|
||
vecViewPos.x = CSceneManager::m_CharacterManager.m_CharacterList[0].m_vecRealPosition.x + vecDir.x * 1500.0f;
|
||
vecViewPos.y = CSceneManager::m_CharacterManager.m_CharacterList[0].m_vecRealPosition.y + 100;//m_pChristmasParticle->m_fHeight;
|
||
|
||
vecViewPos.z = CSceneManager::m_CharacterManager.m_CharacterList[0].m_vecRealPosition.z + vecDir.z * 1500.0f;
|
||
*/
|
||
//m_Nodes[i]->m_vecCenter = D3DXVECTOR3(vecViewPos.x,vecViewPos.y,vecViewPos.z);
|
||
m_Nodes[i]->m_vecRight = D3DXVECTOR3(vecCross.x,vecCross.y,vecCross.z);
|
||
m_Nodes[i]->m_vecUp = D3DXVECTOR3(vecUp.x,vecUp.y,vecUp.z);
|
||
m_Nodes[i]->SetStart(true);
|
||
///Sound
|
||
CEffScript *pCristmas = new CEffScript;
|
||
pCristmas->GetScriptBinData("Christmaspiyu.esf");
|
||
|
||
CSceneManager::AddInterfaceScript(pCristmas);
|
||
vector3 *vecCameraPos = CSceneManager::m_ViewCamera->GetPosition();
|
||
|
||
pCristmas->SetStartPos(vecCameraPos->x,vecCameraPos->y,vecCameraPos->z);
|
||
pCristmas->SetEndPos(vecCameraPos->x,vecCameraPos->y,vecCameraPos->z);
|
||
|
||
pCristmas->SetChr(NULL,NULL);
|
||
pCristmas->SetChrFwd(0.0f,0.0f,1.0f);
|
||
|
||
|
||
|
||
}
|
||
|
||
if(m_Nodes[i]->m_fHeight >= 500.0f) { // <20><>ǥ <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_Nodes[i]->SetExtUse(true);
|
||
m_Nodes[i]->SetStart(false);
|
||
m_Nodes[i]->SetMaxLife(80.0f);
|
||
|
||
///Sound
|
||
CEffScript *pCristmas = new CEffScript;
|
||
|
||
|
||
int iRand = rand() % 4;
|
||
|
||
switch(iRand) {
|
||
case 0:
|
||
m_Nodes[i]->SetColor(g_ChristmasParticleColor[0].x,g_ChristmasParticleColor[0].y,g_ChristmasParticleColor[0].z,
|
||
g_ChristmasParticleColor[0].x,g_ChristmasParticleColor[0].y,g_ChristmasParticleColor[0].z);
|
||
|
||
break;
|
||
case 1:
|
||
m_Nodes[i]->SetColor(g_ChristmasParticleColor[1].x,g_ChristmasParticleColor[1].y,g_ChristmasParticleColor[2].z,
|
||
g_ChristmasParticleColor[1].x,g_ChristmasParticleColor[1].y,g_ChristmasParticleColor[2].z);
|
||
|
||
|
||
break;
|
||
case 2:
|
||
m_Nodes[i]->SetColor(g_ChristmasParticleColor[2].x,g_ChristmasParticleColor[2].y,g_ChristmasParticleColor[2].z,
|
||
g_ChristmasParticleColor[2].x,g_ChristmasParticleColor[2].y,g_ChristmasParticleColor[2].z);
|
||
|
||
|
||
break;
|
||
case 3:
|
||
m_Nodes[i]->SetColor(g_ChristmasParticleColor[3].x,g_ChristmasParticleColor[3].y,g_ChristmasParticleColor[3].z,
|
||
g_ChristmasParticleColor[3].x,g_ChristmasParticleColor[3].y,g_ChristmasParticleColor[3].z);
|
||
|
||
break;
|
||
|
||
}
|
||
pCristmas->GetScriptBinData("ChristParticle.esf");
|
||
|
||
CSceneManager::AddInterfaceScript(pCristmas);
|
||
vector3 *vecCameraPos = CSceneManager::m_ViewCamera->GetPosition();
|
||
|
||
pCristmas->SetStartPos(vecCameraPos->x,vecCameraPos->y,vecCameraPos->z);
|
||
pCristmas->SetEndPos(vecCameraPos->x,vecCameraPos->y,vecCameraPos->z);
|
||
|
||
pCristmas->SetChr(NULL,NULL);
|
||
pCristmas->SetChrFwd(0.0f,0.0f,1.0f);
|
||
|
||
|
||
m_Nodes[i]->SetVisible(1.0f,0.0f);
|
||
m_Nodes[i]->CreateChristmasParticle(m_Nodes[i]->m_vecCenter.x,
|
||
(m_Nodes[i]->m_vecCenter.y + (m_Nodes[i]->m_fHeight * 2.0f)),m_Nodes[i]->m_vecCenter.z,
|
||
5.0f,850,
|
||
m_Nodes[i]->m_vecRight.x,m_Nodes[i]->m_vecRight.y,m_Nodes[i]->m_vecRight.z,
|
||
m_Nodes[i]->m_vecUp.x,m_Nodes[i]->m_vecUp.y,m_Nodes[i]->m_vecUp.z,true);
|
||
|
||
m_Nodes[i]->m_fHeight = 0.0f;
|
||
}
|
||
else if(m_Nodes[i]->m_bStart) {
|
||
m_Nodes[i]->SetMaxLife(10.0f);
|
||
m_Nodes[i]->SetColor(1.0f,1.0f,1.0f,1.0f,1.0f,1.0f);
|
||
m_Nodes[i]->SetVisible(0.3f,0.0f);
|
||
m_Nodes[i]->CreateChristmasParticle(m_Nodes[i]->m_vecCenter.x,
|
||
(m_Nodes[i]->m_vecCenter.y + m_Nodes[i]->m_fHeight),m_Nodes[i]->m_vecCenter.z,0.1f,10,
|
||
m_Nodes[i]->m_vecRight.x,m_Nodes[i]->m_vecRight.y,m_Nodes[i]->m_vecRight.z,
|
||
m_Nodes[i]->m_vecUp.x,m_Nodes[i]->m_vecUp.y,m_Nodes[i]->m_vecUp.z);
|
||
|
||
}
|
||
|
||
|
||
m_Nodes[i]->m_dwStartTime = timeGetTime();
|
||
m_Nodes[i]->Update(1.0f,m_Nodes[i]->m_fHeight);
|
||
|
||
}
|
||
|
||
}
|
||
DeleteEnd();
|
||
|
||
|
||
}
|