Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
980 lines
23 KiB
C++
980 lines
23 KiB
C++
// X3DEffectManager.cpp: implementation of the CX3DEffectManager class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "X3DEffectManager.h"
|
|
#include "X3DEffectMesh.h"
|
|
#include "SceneNode.h"
|
|
#include "SceneManager.h"
|
|
//#include <crtdbg.h>
|
|
#include "GMMemory.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CX3DEffectManager::CX3DEffectManager()
|
|
{
|
|
m_lstExist.clear();
|
|
m_lstFree.clear();
|
|
m_lstEffect.clear();
|
|
m_lstEffect.reserve(40);
|
|
m_lstScript.clear();
|
|
m_lstScript.reserve(40);
|
|
m_lstWScript.clear();
|
|
m_lstIScript.clear();
|
|
m_lstLightning.clear();
|
|
|
|
m_EffScriptLimitNum = DEFAULTLIMITSCRIPT;
|
|
m_EffScriptLimitCount = 0;
|
|
|
|
m_pFrustum = new CViewFrustum;
|
|
|
|
}
|
|
|
|
CX3DEffectManager::~CX3DEffectManager()
|
|
{
|
|
DeleteAllEffect();
|
|
DeleteAllEffectScript();
|
|
DeleteAllWorldScript();
|
|
DeleteAllInterfaceScript();
|
|
DeleteAllLightning();
|
|
|
|
delete m_pFrustum;
|
|
m_pFrustum = NULL;
|
|
|
|
// CX3DEffectMesh::DeleteAllCash(); // Mesh Cash List Delete
|
|
|
|
|
|
}
|
|
|
|
void CX3DEffectManager::UpdateFrame(void)
|
|
{
|
|
EffectHandleList::iterator it;
|
|
long count = m_lstExist.size() - 1, j;
|
|
CX3DEffect *pEffect;
|
|
|
|
m_lpD3DDevice->GetTransform(D3DTS_VIEW, (D3DMATRIX *)&m_matView);
|
|
|
|
m_dwTick = timeGetTime();
|
|
|
|
for(it = m_lstExist.begin(), j = 0; j <= count; it++, j++)
|
|
{
|
|
pEffect = m_lstEffect[(*it)];
|
|
// ½ÃÀÛ µÇ¾úÀ¸¸é update
|
|
if(pEffect->GetEffectStart()) {
|
|
if(m_dwTick - pEffect->GetTick() >= pEffect->GetFrameTick())
|
|
{
|
|
if(!pEffect->Interpolation(m_dwTick - pEffect->GetTick()))
|
|
{
|
|
m_lstFree.push_back((*it));
|
|
delete pEffect;
|
|
pEffect = NULL;
|
|
m_lstExist.erase(it);
|
|
it--;
|
|
} else
|
|
{
|
|
pEffect->SetTick(m_dwTick);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CX3DEffectManager::Render(int num)
|
|
{
|
|
EffectHandleList::iterator it;
|
|
int i=0;
|
|
|
|
m_lpD3DDevice->SetVertexShader(LVERTEXFVF);
|
|
|
|
m_lpD3DDevice->SetTexture(0, NULL);
|
|
m_lpD3DDevice->SetTexture(1, NULL);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
|
m_lpD3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_ALWAYS);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHAREF,0x00000000);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);
|
|
|
|
for(it = m_lstExist.begin(); it != m_lstExist.end(); it++,i++)
|
|
{
|
|
if(i== num) {
|
|
m_lpD3DDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);
|
|
|
|
}
|
|
//if(effectmap->EffectSectorIn(
|
|
//camera pos
|
|
matrix *matViewPosition=CSceneManager::GetCamera()->GetMatPosition();
|
|
vector3 vecViewPos=matViewPosition->GetLoc();
|
|
|
|
int indexx=(int)(vecViewPos.x/SECTORSIZE);
|
|
int indexy=(int)(vecViewPos.z/SECTORSIZE);
|
|
|
|
//culling
|
|
CSceneNode CheckNode;
|
|
|
|
CheckNode.m_fRad=100.0f;
|
|
CheckNode.m_AccumulateTM.Translation(*m_lstEffect[(*it)]->GetCenter());
|
|
if(m_lstEffect[(*it)]->map_effect == true) {
|
|
if(CheckNode.isCulling())
|
|
{
|
|
//if(effectmap->EffectSectorIn(indexx,indexy,i)) {
|
|
if(m_lstEffect[(*it)]) m_lstEffect[(*it)]->Render();
|
|
//}
|
|
|
|
}
|
|
}
|
|
else {
|
|
if(m_lstEffect[(*it)]) m_lstEffect[(*it)]->Render();
|
|
}
|
|
if(i == num)
|
|
m_lpD3DDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
|
|
|
|
}
|
|
|
|
matrix matWorld;
|
|
matWorld.MakeIdent();
|
|
m_lpD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX *)&matWorld);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
|
|
}
|
|
|
|
void CX3DEffectManager::Render()
|
|
{
|
|
EffectHandleList::iterator it;
|
|
int i=0;
|
|
|
|
m_lpD3DDevice->SetVertexShader(LVERTEXFVF);
|
|
|
|
m_lpD3DDevice->SetTexture(0, NULL);
|
|
m_lpD3DDevice->SetTexture(1, NULL);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
|
|
m_lpD3DDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
|
|
|
|
m_lpD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
|
m_lpD3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_ALWAYS);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHAREF,0x00000000);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);
|
|
|
|
for(it = m_lstExist.begin(); it != m_lstExist.end(); it++,i++)
|
|
{
|
|
if(!(m_lstEffect[(*it)]->GetEffectStart()))
|
|
continue;
|
|
//if(effectmap->EffectSectorIn(
|
|
//camera pos
|
|
matrix *matViewPosition=CSceneManager::GetCamera()->GetMatPosition();
|
|
vector3 vecViewPos=matViewPosition->GetLoc();
|
|
|
|
int indexx=(int)(vecViewPos.x/SECTORSIZE);
|
|
int indexy=(int)(vecViewPos.z/SECTORSIZE);
|
|
|
|
//culling
|
|
CSceneNode CheckNode;
|
|
|
|
CheckNode.m_fRad=100.0f;
|
|
CheckNode.m_AccumulateTM.Translation(*m_lstEffect[(*it)]->GetCenter());
|
|
if(m_lstEffect[(*it)]->map_effect == true) {
|
|
if(CheckNode.isCulling())
|
|
{
|
|
//if(effectmap->EffectSectorIn(indexx,indexy,i)) {
|
|
if(m_lstEffect[(*it)]) m_lstEffect[(*it)]->Render();
|
|
//}
|
|
|
|
}
|
|
}
|
|
else {
|
|
if(m_lstEffect[(*it)]) m_lstEffect[(*it)]->Render();
|
|
}
|
|
|
|
}
|
|
|
|
matrix matWorld;
|
|
matWorld.MakeIdent();
|
|
m_lpD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX *)&matWorld);
|
|
|
|
m_lpD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
|
|
m_lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
|
|
}
|
|
|
|
XEFFECT CX3DEffectManager::AddEffect(CX3DEffect *lpNewEffect)
|
|
{
|
|
XEFFECT hEffect;
|
|
if(m_lstFree.empty())
|
|
{
|
|
hEffect = m_lstEffect.size();
|
|
m_lstEffect.push_back(lpNewEffect);
|
|
} else
|
|
{
|
|
hEffect = m_lstFree.back();
|
|
m_lstEffect[hEffect] = lpNewEffect;
|
|
m_lstFree.pop_back();
|
|
}
|
|
|
|
lpNewEffect->SetDevice(m_lpD3DDevice);
|
|
lpNewEffect->SetViewMatrix(&m_matView);
|
|
lpNewEffect->SetEffectSetting();
|
|
lpNewEffect->SetTick(timeGetTime());
|
|
m_lstExist.push_back(hEffect);
|
|
return hEffect;
|
|
}
|
|
char *CX3DEffectManager::GetEsfName(int index) {
|
|
if(m_lstScript[index] != NULL) {
|
|
return m_lstScript[index]->m_FileName;
|
|
}
|
|
return NULL;
|
|
}
|
|
void CX3DEffectManager::AddLightning(CLightning *new_light) {
|
|
m_lstLightning.push_back(new_light);
|
|
}
|
|
CEffScript *CX3DEffectManager::AddEffScript(CEffScript *new_script) {
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
if(!new_script->GetMine()) { // ³»°¡ »ç¿ëÇÑ ½ºÅ³ÀÌ ¾Æ´Ï¸é Á¦ÇÑ °¹¼ö Àû¿ë
|
|
if(new_script->GetBSkill() && (!new_script->GetChant())) { // skill effect À̸é Àû¿ë
|
|
if(m_EffScriptLimitCount > m_EffScriptLimitNum) {
|
|
return NULL;
|
|
}
|
|
else
|
|
m_EffScriptLimitCount++;
|
|
}
|
|
}
|
|
m_lstScript.push_back(new_script);
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
///////// ÀÎÅÍÆäÀ̽º ÀÌÆÑÆ® Å×½ºÆ®///
|
|
/*
|
|
// interface effect
|
|
vector3 pos;
|
|
matrix *matpos = NULL;
|
|
vector3 camera_fwd;
|
|
matpos = CSceneManager::GetCamera()->GetMatPosition();
|
|
|
|
camera_fwd = CSceneManager::GetCamera()->GetViewTowardVector();
|
|
|
|
pos.x = matpos->_41;
|
|
pos.y = matpos->_42;
|
|
pos.z = matpos->_43;
|
|
|
|
pos.x += (camera_fwd.x * 300.0f);
|
|
pos.y += (camera_fwd.y * 300.0f);
|
|
pos.z += (camera_fwd.z * 300.0f);
|
|
|
|
new_script->SetStartPos(pos.x,pos.y,pos.z);
|
|
|
|
// interface effect
|
|
//screen projection
|
|
D3DXMATRIX t_project;
|
|
D3DXMATRIX t_view;
|
|
D3DXMATRIX t_world;
|
|
D3DXVECTOR3 t_pos;
|
|
|
|
D3DVIEWPORT8 t_viewport;
|
|
|
|
t_pos.x = pos.x;
|
|
t_pos.y = pos.y;
|
|
t_pos.z = pos.z;
|
|
|
|
m_lpD3DDevice->GetViewport(&t_viewport);
|
|
m_lpD3DDevice->GetTransform(D3DTS_WORLD,&t_world);
|
|
m_lpD3DDevice->GetTransform(D3DTS_VIEW,&t_view);
|
|
m_lpD3DDevice->GetTransform(D3DTS_PROJECTION,&t_project);
|
|
|
|
D3DXVec3Project(&(new_script->m_Projection),
|
|
&t_pos,
|
|
&t_viewport,
|
|
&t_project,
|
|
&t_view,
|
|
&t_world);
|
|
|
|
new_script->SetScriptValue(ESINTERFACE);
|
|
*/
|
|
//////////
|
|
new_script->SetDevice(m_lpD3DDevice);
|
|
//return (m_lstScript.size() - 1);
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
return new_script;
|
|
|
|
}
|
|
int CX3DEffectManager::AddWorldEffScript(CEffScript *new_script) {
|
|
m_lstWScript.push_back(new_script);
|
|
new_script->SetDevice(m_lpD3DDevice);
|
|
new_script->SetWorldEffect(true);
|
|
return (m_lstWScript.size() - 1);
|
|
|
|
}
|
|
CEffScript *CX3DEffectManager::AddInterfaceScript(CEffScript *new_script) {
|
|
// ƯÁ¤ Æ÷Áö¼ÇÀÌ ¼³Á¤µÇ¾îÀÖÁö ¾ÊÀ¸¸é
|
|
|
|
/* if(!(new_script->m_bInterfaceSet)) {
|
|
vector3 pos;
|
|
matrix *matpos = NULL;
|
|
vector3 camera_fwd;
|
|
vector3 camera_up;
|
|
vector3 camera_right;
|
|
|
|
matpos = CSceneManager::GetCamera()->GetMatPosition();
|
|
|
|
camera_fwd = CSceneManager::GetCamera()->GetViewTowardVector();
|
|
camera_up = CSceneManager::GetCamera()->GetViewUpVector();
|
|
|
|
camera_right = camera_fwd^camera_up;
|
|
|
|
//camera_fwd = CSceneManager::GetCamera()->GetFwdVector();
|
|
|
|
pos.x = matpos->_41;
|
|
pos.y = matpos->_42;
|
|
pos.z = matpos->_43;
|
|
|
|
pos.x += (camera_fwd.x * 100.0f);
|
|
pos.y += (camera_fwd.y * 100.0f);
|
|
pos.z += (camera_fwd.z * 100.0f);
|
|
|
|
if(new_script->m_bInterfacePos) {
|
|
pos += (camera_up * (new_script->m_InterfacePos[1]));
|
|
pos += ((-camera_right) * (new_script->m_InterfacePos[0]));
|
|
}
|
|
//pos *= 100.0f;
|
|
|
|
new_script->SetStartPos(pos.x,pos.y,pos.z);
|
|
|
|
// interface effect
|
|
//screen projection
|
|
D3DXMATRIX t_project;
|
|
D3DXMATRIX t_view;
|
|
D3DXMATRIX t_world;
|
|
D3DXVECTOR3 t_pos;
|
|
|
|
D3DVIEWPORT8 t_viewport;
|
|
|
|
t_pos.x = pos.x;
|
|
t_pos.y = pos.y;
|
|
t_pos.z = pos.z;
|
|
|
|
|
|
m_lpD3DDevice->GetViewport(&t_viewport);
|
|
m_lpD3DDevice->GetTransform(D3DTS_WORLD,&t_world);
|
|
m_lpD3DDevice->GetTransform(D3DTS_VIEW,&t_view);
|
|
m_lpD3DDevice->GetTransform(D3DTS_PROJECTION,&t_project);
|
|
|
|
D3DXVec3Project(&(new_script->m_Projection),
|
|
&t_pos,
|
|
&t_viewport,
|
|
&t_project,
|
|
&t_view,
|
|
&t_world);
|
|
|
|
|
|
new_script->SetScriptValue(ESINTERFACE);
|
|
for(int i=0;i<new_script->m_SubScriptNum;i++) {
|
|
new_script->m_SubScript[i].m_Projection = new_script->m_Projection;
|
|
}
|
|
}
|
|
*/
|
|
new_script->SetInterfaceSet(true);
|
|
if(new_script->m_SubScriptNum >0) {
|
|
new_script->m_bInterfacePos = true; // sub interface effect ¸¦ ÀÌ¿ëÇϱâ À§ÇÑ setting
|
|
}
|
|
m_lstIScript.push_back(new_script);
|
|
|
|
new_script->SetDevice(m_lpD3DDevice);
|
|
return new_script;
|
|
|
|
}
|
|
|
|
int CX3DEffectManager::ProcessScript(int i) {// return value 0: ½ºÅ©¸³Æ® Á¾·á
|
|
// 1: ½ºÅ©¸³Æ® À¯Áö
|
|
// 2: effect target¿¡ Ãæµ¹
|
|
|
|
|
|
int index = 0;
|
|
|
|
if(((int)m_lstScript.size() - 1)< i) {
|
|
return 1;
|
|
}
|
|
|
|
if(m_lstScript[i] == NULL) {
|
|
DeleteEndScript(i);
|
|
return 0;
|
|
}
|
|
index = m_lstScript[i]->ProcessEffect(CSceneManager::m_SkillWeatherEffect);
|
|
if(!index)
|
|
DeleteEndScript(i);
|
|
else if(index == 2) {
|
|
m_lstScript[i]->SetCrash(true);
|
|
}
|
|
else
|
|
m_lstScript[i]->SetCrash(false);
|
|
return index;
|
|
}
|
|
// µÎ¹øÂ° ŸÀÔÀÇ ÀÌÆÑÆ® °Ë»ç :: NULL À̸é ó¸® ³¡À̶ó´Â Àǹ̷Πtrue return
|
|
bool CX3DEffectManager::CheckNullScript(CEffScript *t) {
|
|
int script_num = m_lstScript.size();
|
|
int i;
|
|
for(i=0;i<script_num;i++) {
|
|
if(m_lstScript[i] == t)
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
bool CX3DEffectManager::CheckNullInterfaceScript(CEffScript *t) {
|
|
int script_num = m_lstIScript.size();
|
|
int i;
|
|
for(i=0;i<script_num;i++) {
|
|
if(m_lstIScript[i] == t)
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
bool CX3DEffectManager::CheckScript(int index,CEffScript *t) {
|
|
if(((int)m_lstScript.size() -1) < index)
|
|
return false;
|
|
if(m_lstScript[index] == t)
|
|
return true;
|
|
return false;
|
|
|
|
}
|
|
|
|
bool CX3DEffectManager::ProcessWScript(int i,bool bCull) {
|
|
int index = 0;
|
|
|
|
if(((int)m_lstWScript.size() - 1)< i)
|
|
return false;
|
|
|
|
if(m_lstWScript[i] == NULL) {
|
|
DeleteWScript(i);
|
|
return false;
|
|
}
|
|
/*if(bCull == false) { // Culling Àû¿ë
|
|
if(m_lstWScript[i]->GetSectorCull())
|
|
return false;
|
|
}*/
|
|
index = m_lstWScript[i]->ProcessEffect();
|
|
|
|
if(!index)
|
|
DeleteWScript(i);
|
|
else if(index == 2) {
|
|
m_lstWScript[i]->SetCrash(true);
|
|
return true;
|
|
}
|
|
else
|
|
m_lstWScript[i]->SetCrash(false);
|
|
return false;
|
|
}
|
|
bool CX3DEffectManager::ProcessLightning(int index) {
|
|
|
|
if(((int)m_lstLightning.size() - 1)< index)
|
|
return false;
|
|
|
|
if(m_lstWScript[index] == NULL) {
|
|
DeleteWScript(index);
|
|
return false;
|
|
}
|
|
D3DXVECTOR3 dermy;
|
|
|
|
m_lstLightning[index]->UpdateLightning(dermy,false);
|
|
|
|
return true;
|
|
|
|
}
|
|
bool CX3DEffectManager::ProcessInterfaceScript(int i) {
|
|
int index = 0;
|
|
|
|
if(((int)m_lstIScript.size() - 1)< i)
|
|
return false;
|
|
|
|
if(m_lstIScript[i] == NULL) {
|
|
DeleteInterfaceScript(i);
|
|
return false;
|
|
}
|
|
|
|
|
|
index = m_lstIScript[i]->ProcessEffect(CSceneManager::m_SkillWeatherEffect);
|
|
if(!index)
|
|
DeleteInterfaceScript(i);
|
|
else if(index == 2) {
|
|
m_lstIScript[i]->SetCrash(true);
|
|
return true;
|
|
}
|
|
else
|
|
m_lstIScript[i]->SetCrash(false);
|
|
return false;
|
|
}
|
|
|
|
bool CX3DEffectManager::CheckInterfaceScript(int index,CEffScript *t) {
|
|
if(m_lstIScript[index] == t)
|
|
return true;
|
|
return false;
|
|
|
|
}
|
|
|
|
int CX3DEffectManager::GetLightningNum() {
|
|
int size = m_lstLightning.size();
|
|
return size;
|
|
}
|
|
|
|
int CX3DEffectManager::GetScriptNum() {
|
|
int size = m_lstScript.size();
|
|
return size;
|
|
}
|
|
int CX3DEffectManager::GetWScriptNum() {
|
|
int size = m_lstWScript.size();
|
|
return size;
|
|
|
|
}
|
|
int CX3DEffectManager::GetInterfaceScriptNum() {
|
|
int size = m_lstIScript.size();
|
|
return size;
|
|
}
|
|
void CX3DEffectManager::RenderScript() {
|
|
|
|
/* if(m_pFrustum != NULL)
|
|
m_pFrustum->Update();
|
|
*/
|
|
|
|
int size = m_lstScript.size();
|
|
int i;
|
|
|
|
for(i=0;i<size;i++) {
|
|
if(m_lstScript[i] != NULL) {
|
|
|
|
// Frustum Culling
|
|
/*
|
|
int iCount = 0;
|
|
int iFalse = 0;
|
|
|
|
if(m_pFrustum != NULL) {
|
|
if(m_lstScript[i]->m_StartPosSet)
|
|
{
|
|
iCount++;
|
|
|
|
if(!m_pFrustum->SphereInFrustum(m_lstScript[i]->m_StartPos.x,
|
|
m_lstScript[i]->m_StartPos.y,
|
|
m_lstScript[i]->m_StartPos.z,
|
|
1600.0f))
|
|
iFalse++;
|
|
}
|
|
if(m_lstScript[i]->m_EndPosNum > 0)
|
|
{
|
|
iCount++;
|
|
|
|
if(!m_pFrustum->SphereInFrustum(m_lstScript[i]->m_EndPos[0].x,
|
|
m_lstScript[i]->m_EndPos[0].y,
|
|
m_lstScript[i]->m_EndPos[0].z,
|
|
1600.0f))
|
|
iFalse++;
|
|
|
|
}
|
|
}
|
|
|
|
if(iFalse != iCount)*/
|
|
m_lstScript[i]->Render();
|
|
|
|
}
|
|
}
|
|
}
|
|
void CX3DEffectManager::RenderLightning() {
|
|
int i;
|
|
for(i=0;i<(int)m_lstLightning.size();i++) {
|
|
if(m_lstLightning[i] != NULL)
|
|
m_lstLightning[i]->Render(0);
|
|
|
|
}
|
|
}
|
|
void CX3DEffectManager::RenderWorldScript(bool bCull) {
|
|
|
|
if(m_pFrustum != NULL)
|
|
m_pFrustum->Update();
|
|
|
|
int size = m_lstWScript.size();
|
|
int i;
|
|
for(i=0;i<size;i++) {
|
|
if(m_lstWScript[i] != NULL) {
|
|
|
|
if((bCull == false) && (m_lstWScript[i]->m_bFrustumCull) ) { // Culling Àû¿ë
|
|
if(m_lstWScript[i]->GetSectorCull())
|
|
continue;
|
|
}
|
|
|
|
if(m_lstWScript[i]->m_bPlayTime) { // Play Time Setting µÇ¾î ÀÖÀ»¶§
|
|
if(m_lstWScript[i]->m_bVisTime) {
|
|
// Frustum Culling
|
|
if(m_pFrustum != NULL) {
|
|
if(m_lstWScript[i]->m_StartPosSet)
|
|
{
|
|
if(m_lstWScript[i]->m_bFrustumCull) {
|
|
if(!m_pFrustum->SphereInFrustum(m_lstWScript[i]->m_StartPos.x,
|
|
m_lstWScript[i]->m_StartPos.y,
|
|
m_lstWScript[i]->m_StartPos.z,
|
|
600.0f))
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
m_lstWScript[i]->Render();
|
|
}
|
|
}
|
|
else {
|
|
// Frustum Culling
|
|
if(m_pFrustum != NULL) {
|
|
if(m_lstWScript[i]->m_StartPosSet)
|
|
{
|
|
|
|
if(m_lstWScript[i]->m_bFrustumCull) {
|
|
if(!m_pFrustum->SphereInFrustum(m_lstWScript[i]->m_StartPos.x,
|
|
m_lstWScript[i]->m_StartPos.y,
|
|
m_lstWScript[i]->m_StartPos.z,
|
|
600.0f))
|
|
continue;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
m_lstWScript[i]->Render();
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
void CX3DEffectManager::RenderInterfaceScript() {
|
|
int i;
|
|
int size = m_lstIScript.size();
|
|
|
|
for(i=0;i<size;i++) {
|
|
|
|
if(m_lstIScript[i] != NULL) {
|
|
// unprojection
|
|
|
|
D3DXMATRIX t_project;
|
|
D3DXMATRIX t_view;
|
|
D3DXMATRIX t_world;
|
|
|
|
D3DXMATRIX t_ortho;
|
|
D3DXMATRIX t_oworld;
|
|
D3DXMATRIX t_oview;
|
|
|
|
D3DXMatrixIdentity(&t_oworld);
|
|
D3DXMatrixIdentity(&t_oview);
|
|
|
|
D3DXVECTOR3 t_pos;
|
|
|
|
D3DVIEWPORT8 t_viewport;
|
|
|
|
m_lpD3DDevice->GetViewport(&t_viewport);
|
|
m_lpD3DDevice->GetTransform(D3DTS_WORLD,&t_world);
|
|
m_lpD3DDevice->GetTransform(D3DTS_VIEW,&t_view);
|
|
m_lpD3DDevice->GetTransform(D3DTS_PROJECTION,&t_project);
|
|
|
|
D3DXMatrixOrthoLH(&t_ortho,100,100,0.1f, 10000.0f);
|
|
m_lpD3DDevice->SetTransform(D3DTS_PROJECTION,&t_ortho);
|
|
m_lpD3DDevice->SetTransform(D3DTS_WORLD,&t_oworld);
|
|
m_lpD3DDevice->SetTransform(D3DTS_VIEW,&t_oview);
|
|
|
|
D3DXVECTOR3 t_proj(0.0f,0.0f,0.2f);
|
|
if(m_lstIScript[i]->m_bInterfacePos) {
|
|
if(m_lstIScript[i]->m_SubScriptNum >0) { //subscript use
|
|
for(int j=0;j<(m_lstIScript[i]->m_SubScriptNum);j++) {
|
|
D3DXMatrixOrthoLH(&t_ortho,100,100,0.1f, 10000.0f);
|
|
|
|
m_lpD3DDevice->SetTransform(D3DTS_PROJECTION,&t_ortho);
|
|
|
|
D3DXMatrixIdentity(&t_oworld);
|
|
D3DXMatrixIdentity(&t_oview);
|
|
|
|
m_lpD3DDevice->SetTransform(D3DTS_WORLD,&t_oworld);
|
|
m_lpD3DDevice->SetTransform(D3DTS_VIEW,&t_oview);
|
|
|
|
t_proj.x = m_lstIScript[i]->m_SubScript[j].m_InterfacePos[0];
|
|
t_proj.y = m_lstIScript[i]->m_SubScript[j].m_InterfacePos[1];
|
|
|
|
D3DXVec3Unproject(
|
|
&t_pos,
|
|
&t_proj,
|
|
&t_viewport,
|
|
&t_ortho,
|
|
&t_oview,
|
|
&t_oworld);
|
|
|
|
m_lstIScript[i]->SetStartPos(t_pos.x,t_pos.y,t_pos.z);
|
|
}
|
|
}
|
|
else { // sub script not use
|
|
t_proj.x = m_lstIScript[i]->m_InterfacePos[0];
|
|
t_proj.y = m_lstIScript[i]->m_InterfacePos[1];
|
|
D3DXVec3Unproject(
|
|
&t_pos,
|
|
&t_proj,
|
|
&t_viewport,
|
|
&t_ortho,
|
|
&t_oview,
|
|
&t_oworld);
|
|
|
|
m_lstIScript[i]->SetStartPos(t_pos.x,t_pos.y,t_pos.z);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
m_lstIScript[i]->Render();
|
|
m_lpD3DDevice->SetTransform(D3DTS_PROJECTION,&t_project);
|
|
m_lpD3DDevice->SetTransform(D3DTS_WORLD,&t_world);
|
|
m_lpD3DDevice->SetTransform(D3DTS_VIEW,&t_view);
|
|
}
|
|
|
|
}
|
|
}
|
|
void CX3DEffectManager::DeleteEndScript(int index) {
|
|
int i;
|
|
for(i=0;i<(int)m_lstScript.size();i++) {
|
|
if(i== index) {
|
|
if(m_lstScript[i] != NULL) {
|
|
|
|
if(!m_lstScript[i]->GetMine()) { // ³»°¡ »ç¿ëÇÑ ½ºÅ³ÀÌ ¾Æ´Ï¸é Á¦ÇÑ °¹¼ö Àû¿ë
|
|
if(m_lstScript[i]->GetBSkill()) { // skill effect À̸é Àû¿ë
|
|
if(m_EffScriptLimitCount)
|
|
m_EffScriptLimitCount--;
|
|
}
|
|
}
|
|
delete m_lstScript[i];
|
|
m_lstScript[i] = NULL;
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
}
|
|
|
|
m_lstScript.erase(m_lstScript.begin() + i);
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
break;
|
|
}
|
|
}
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
}
|
|
void CX3DEffectManager::DeleteLightning(int index) {
|
|
int i;
|
|
for(i=0;i<(int)m_lstLightning.size();i++) {
|
|
if(i == index) {
|
|
if(m_lstLightning[i] != NULL) {
|
|
delete m_lstLightning[i];
|
|
m_lstLightning[i] = NULL;
|
|
|
|
}
|
|
m_lstLightning.erase(m_lstLightning.begin() + i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
void CX3DEffectManager::DeleteEndScript(CEffScript *del) {
|
|
int i;
|
|
for(i=0;i<(int)m_lstScript.size();i++) {
|
|
if(m_lstScript[i] == del) {
|
|
if(!m_lstScript[i]->GetMine()) { // ³»°¡ »ç¿ëÇÑ ½ºÅ³ÀÌ ¾Æ´Ï¸é Á¦ÇÑ °¹¼ö Àû¿ë
|
|
if(m_lstScript[i]->GetBSkill()) { // skill effect À̸é Àû¿ë
|
|
if(m_EffScriptLimitCount)
|
|
m_EffScriptLimitCount--;
|
|
}
|
|
}
|
|
|
|
delete m_lstScript[i];
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
m_lstScript[i] = NULL;
|
|
|
|
m_lstScript.erase(m_lstScript.begin() + i);
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
break;
|
|
}
|
|
}
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
}
|
|
void CX3DEffectManager::DeleteWScript(int index) {
|
|
|
|
int i;
|
|
for(i=0;i<(int)m_lstWScript.size();i++) {
|
|
if(i== index) {
|
|
if(m_lstWScript[i] != NULL) {
|
|
delete m_lstWScript[i];
|
|
m_lstWScript[i] = NULL;
|
|
}
|
|
m_lstWScript.erase(m_lstWScript.begin() + i);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
void CX3DEffectManager::DeleteInterfaceScript(int index) {
|
|
int i;
|
|
for(i=0;i<(int)m_lstIScript.size();i++) {
|
|
if(i== index) {
|
|
if(m_lstIScript[i] != NULL) {
|
|
delete m_lstIScript[i];
|
|
m_lstIScript[i] = NULL;
|
|
}
|
|
m_lstIScript.erase(m_lstIScript.begin() + i);
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
void CX3DEffectManager::DeleteInterfaceScript(CEffScript *del) {
|
|
int i;
|
|
for(i=0;i<(int)m_lstIScript.size();i++) {
|
|
if(m_lstIScript[i] == del) {
|
|
delete m_lstIScript[i];
|
|
m_lstIScript[i] = NULL;
|
|
m_lstIScript.erase(m_lstIScript.begin() + i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CX3DEffectManager::DeleteEffect(XEFFECT hEffect)
|
|
{
|
|
m_lstFree.push_back(hEffect);
|
|
delete (CX3DEffect *)m_lstEffect[hEffect];
|
|
|
|
EffectHandleList::iterator it;
|
|
for(it = m_lstExist.begin(); it != m_lstExist.end(); it++)
|
|
{
|
|
if(hEffect == (*it)) {
|
|
m_lstExist.erase(it);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
BOOL CX3DEffectManager::IsLive(XEFFECT hEffect)
|
|
{
|
|
EffectHandleList::iterator it;
|
|
|
|
for(it = m_lstFree.begin(); it != m_lstFree.end(); it++)
|
|
{
|
|
if(hEffect == (*it)) return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CX3DEffectManager::DeleteAllEffect(void)
|
|
{
|
|
EffectHandleList::iterator it;
|
|
|
|
if(m_lstExist.size())
|
|
{
|
|
for(it = m_lstExist.begin(); it != m_lstExist.end(); it++)
|
|
{
|
|
delete (CX3DEffect *)m_lstEffect[(*it)];
|
|
}
|
|
|
|
m_lstExist.clear();
|
|
}
|
|
m_lstFree.clear();
|
|
m_lstEffect.clear();
|
|
//m_lstScript.clear();
|
|
|
|
}
|
|
|
|
void CX3DEffectManager::DeleteAllEffectScript() {
|
|
|
|
int i;
|
|
|
|
// Pool »ç¿ë½Ã¿¡ ¸Þ¸ð¸® ÇØÁ¦°¡ Á¦´ë·Î ¾ÈµÇ°í ÀÖÀ½.. by Vincent
|
|
//if(CEffScript::ms_myPool.m_nTotalInUse) {
|
|
for(i=0;i<(int)m_lstScript.size();i++) {
|
|
if(m_lstScript[i] != NULL) {
|
|
delete m_lstScript[i];
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
m_lstScript[i] = NULL;
|
|
}
|
|
|
|
}
|
|
//}
|
|
m_lstScript.clear();
|
|
// _ASSERTE( _CrtCheckMemory());
|
|
}
|
|
|
|
void CX3DEffectManager::DeleteAllLightning() {
|
|
int i;
|
|
for(i=0;i<(int)m_lstLightning.size();i++) {
|
|
if(m_lstLightning[i] != NULL) {
|
|
delete m_lstLightning[i];
|
|
m_lstLightning[i] = NULL;
|
|
}
|
|
}
|
|
m_lstLightning.clear();
|
|
|
|
}
|
|
|
|
void CX3DEffectManager::DeleteAllWorldScript() {
|
|
|
|
int i;
|
|
// Pool »ç¿ë½Ã¿¡ ¸Þ¸ð¸® ÇØÁ¦°¡ Á¦´ë·Î ¾ÈµÇ°í ÀÖÀ½.. by Vincent
|
|
//if(CEffScript::ms_myPool.m_nTotalInUse) {
|
|
for(i=0;i<(int)m_lstWScript.size();i++) {
|
|
if(m_lstWScript[i] != NULL) {
|
|
delete m_lstWScript[i];
|
|
m_lstWScript[i] = NULL;
|
|
}
|
|
|
|
}
|
|
//}
|
|
m_lstWScript.clear();
|
|
|
|
|
|
}
|
|
|
|
void CX3DEffectManager::DeleteAllInterfaceScript() {
|
|
int i;
|
|
// Pool »ç¿ë½Ã¿¡ ¸Þ¸ð¸® ÇØÁ¦°¡ Á¦´ë·Î ¾ÈµÇ°í ÀÖÀ½.. by Vincent
|
|
//if(CEffScript::ms_myPool.m_nTotalInUse) {
|
|
for(i=0;i<(int)m_lstIScript.size();i++) {
|
|
if(m_lstIScript[i] != NULL) {
|
|
delete m_lstIScript[i];
|
|
m_lstIScript[i] = NULL;
|
|
}
|
|
|
|
}
|
|
//}
|
|
m_lstIScript.clear();
|
|
}
|