forked from metin2/client
convert comments in cpp files to utf8
This commit is contained in:
parent
4525e3103d
commit
361a62853d
@ -52,7 +52,7 @@ void CEffectInstance::UpdateSound()
|
|||||||
{
|
{
|
||||||
CSoundManager& rkSndMgr=CSoundManager::Instance();
|
CSoundManager& rkSndMgr=CSoundManager::Instance();
|
||||||
rkSndMgr.UpdateSoundInstance(m_matGlobal._41, m_matGlobal._42, m_matGlobal._43, m_dwFrame, m_pSoundInstanceVector);
|
rkSndMgr.UpdateSoundInstance(m_matGlobal._41, m_matGlobal._42, m_matGlobal._43, m_dwFrame, m_pSoundInstanceVector);
|
||||||
// NOTE : 매트릭스에서 위치를 직접 얻어온다 - [levites]
|
// NOTE : 매트릭스에서 위치를 직접 얻어온다 - [levites]
|
||||||
}
|
}
|
||||||
++m_dwFrame;
|
++m_dwFrame;
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ bool CEffectManager::IsAliveEffect(DWORD dwInstanceIndex)
|
|||||||
void CEffectManager::Update()
|
void CEffectManager::Update()
|
||||||
{
|
{
|
||||||
|
|
||||||
// 2004. 3. 1. myevan. 이펙트 모니터링 하는 코드
|
// 2004. 3. 1. myevan. 이펙트 모니터링 하는 코드
|
||||||
/*
|
/*
|
||||||
if (GetAsyncKeyState(VK_F9))
|
if (GetAsyncKeyState(VK_F9))
|
||||||
{
|
{
|
||||||
@ -173,8 +173,8 @@ BOOL CEffectManager::RegisterEffect(const char * c_szFileName,bool isExistDelete
|
|||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
// CEffectData 를 포인터형으로 리턴하게 하고..
|
// CEffectData 를 포인터형으로 리턴하게 하고..
|
||||||
// CEffectData에서 CRC를 얻을수 있게 한다
|
// CEffectData에서 CRC를 얻을수 있게 한다
|
||||||
BOOL CEffectManager::RegisterEffect2(const char * c_szFileName, DWORD* pdwRetCRC, bool isNeedCache)
|
BOOL CEffectManager::RegisterEffect2(const char * c_szFileName, DWORD* pdwRetCRC, bool isNeedCache)
|
||||||
{
|
{
|
||||||
std::string strFileName;
|
std::string strFileName;
|
||||||
|
@ -185,9 +185,9 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal)
|
|||||||
case BILLBOARD_TYPE_ALL:
|
case BILLBOARD_TYPE_ALL:
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
// NOTE : Rotation Routine. Camera의 Up Vector와 Cross Vector 자체를 View Vector 기준으로
|
// NOTE : Rotation Routine. Camera의 Up Vector와 Cross Vector 자체를 View Vector 기준으로
|
||||||
// Rotation 시킨다.
|
// Rotation 시킨다.
|
||||||
// FIXME : 반드시 최적화 할 것!
|
// FIXME : 반드시 최적화 할 것!
|
||||||
if (m_fRotation==0.0f)
|
if (m_fRotation==0.0f)
|
||||||
{
|
{
|
||||||
v3Up = -c_rv3Cross;
|
v3Up = -c_rv3Cross;
|
||||||
@ -239,7 +239,7 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal)
|
|||||||
D3DXVec3TransformNormal(&v3Up, &v3Up, c_matLocal);
|
D3DXVec3TransformNormal(&v3Up, &v3Up, c_matLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: 속도가 길이에 주는 영향 : log(velocity)만큼 늘어난다.
|
// NOTE: 속도가 길이에 주는 영향 : log(velocity)만큼 늘어난다.
|
||||||
float length = D3DXVec3Length(&v3Up);
|
float length = D3DXVec3Length(&v3Up);
|
||||||
if (length == 0.0f)
|
if (length == 0.0f)
|
||||||
{
|
{
|
||||||
@ -342,9 +342,9 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal, const float c_f
|
|||||||
case BILLBOARD_TYPE_ALL:
|
case BILLBOARD_TYPE_ALL:
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
// NOTE : Rotation Routine. Camera의 Up Vector와 Cross Vector 자체를 View Vector 기준으로
|
// NOTE : Rotation Routine. Camera의 Up Vector와 Cross Vector 자체를 View Vector 기준으로
|
||||||
// Rotation 시킨다.
|
// Rotation 시킨다.
|
||||||
// FIXME : 반드시 최적화 할 것!
|
// FIXME : 반드시 최적화 할 것!
|
||||||
if (m_fRotation==0.0f)
|
if (m_fRotation==0.0f)
|
||||||
{
|
{
|
||||||
v3Up = -c_rv3Cross;
|
v3Up = -c_rv3Cross;
|
||||||
@ -373,7 +373,7 @@ void CParticleInstance::Transform(const D3DXMATRIX * c_matLocal, const float c_f
|
|||||||
D3DXVec3TransformNormal(&v3Up, &v3Up, c_matLocal);
|
D3DXVec3TransformNormal(&v3Up, &v3Up, c_matLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: 속도가 길이에 주는 영향 : log(velocity)만큼 늘어난다.
|
// NOTE: 속도가 길이에 주는 영향 : log(velocity)만큼 늘어난다.
|
||||||
float length = D3DXVec3Length(&v3Up);
|
float length = D3DXVec3Length(&v3Up);
|
||||||
if (length == 0.0f)
|
if (length == 0.0f)
|
||||||
{
|
{
|
||||||
|
@ -161,8 +161,8 @@ void CParticleSystemInstance::CreateParticles(float fElapsedTime)
|
|||||||
D3DXVec3TransformCoord(&v3TimePosition, &v3TimePosition, mc_pmatLocal);
|
D3DXVec3TransformCoord(&v3TimePosition, &v3TimePosition, mc_pmatLocal);
|
||||||
}
|
}
|
||||||
pInstance->m_v3StartPosition = v3TimePosition;
|
pInstance->m_v3StartPosition = v3TimePosition;
|
||||||
// NOTE : Update를 호출하지 않고 Rendering 되기 때문에 length가 0이 되는 문제가 있다.
|
// NOTE : Update를 호출하지 않고 Rendering 되기 때문에 length가 0이 되는 문제가 있다.
|
||||||
// Velocity를 구한 후 그만큼 빼준 값으로 초기화 해주도록 바꿨음 - [levites]
|
// Velocity를 구한 후 그만큼 빼준 값으로 초기화 해주도록 바꿨음 - [levites]
|
||||||
//pInstance->m_v3LastPosition = pInstance->m_v3Position;
|
//pInstance->m_v3LastPosition = pInstance->m_v3Position;
|
||||||
|
|
||||||
// Direction & Velocity
|
// Direction & Velocity
|
||||||
@ -212,8 +212,8 @@ void CParticleSystemInstance::CreateParticles(float fElapsedTime)
|
|||||||
// Rotation
|
// Rotation
|
||||||
pInstance->m_fRotation = m_pParticleProperty->m_wRotationRandomStartingBegin;
|
pInstance->m_fRotation = m_pParticleProperty->m_wRotationRandomStartingBegin;
|
||||||
pInstance->m_fRotation = frandom(m_pParticleProperty->m_wRotationRandomStartingBegin,m_pParticleProperty->m_wRotationRandomStartingEnd);
|
pInstance->m_fRotation = frandom(m_pParticleProperty->m_wRotationRandomStartingBegin,m_pParticleProperty->m_wRotationRandomStartingEnd);
|
||||||
// Rotation - Lie 일 경우 LocalMatrix 의 Rotation 값을 Random 에 적용한다.
|
// Rotation - Lie 일 경우 LocalMatrix 의 Rotation 값을 Random 에 적용한다.
|
||||||
// 매번 할 필요는 없을듯. 어느 정도의 최적화가 필요. - [levites]
|
// 매번 할 필요는 없을듯. 어느 정도의 최적화가 필요. - [levites]
|
||||||
if (BILLBOARD_TYPE_LIE == m_pParticleProperty->m_byBillboardType && mc_pmatLocal)
|
if (BILLBOARD_TYPE_LIE == m_pParticleProperty->m_byBillboardType && mc_pmatLocal)
|
||||||
{
|
{
|
||||||
pInstance->m_fRotation += fLieRotation;
|
pInstance->m_fRotation += fLieRotation;
|
||||||
@ -486,7 +486,7 @@ void CParticleSystemInstance::OnInitialize()
|
|||||||
|
|
||||||
void CParticleSystemInstance::OnDestroy()
|
void CParticleSystemInstance::OnDestroy()
|
||||||
{
|
{
|
||||||
// 2004. 3. 1. myevan. 파티클 제거 루틴
|
// 2004. 3. 1. myevan. 파티클 제거 루틴
|
||||||
TParticleInstanceListVector::iterator i;
|
TParticleInstanceListVector::iterator i;
|
||||||
for(i = m_ParticleInstanceListVector.begin(); i!=m_ParticleInstanceListVector.end(); ++i)
|
for(i = m_ParticleInstanceListVector.begin(); i!=m_ParticleInstanceListVector.end(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -60,9 +60,9 @@ bool CDir::Create(const char * c_szFilter, const char* c_szPath, BOOL bCheckedEx
|
|||||||
if (!c_szExtension)
|
if (!c_szExtension)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// NOTE : 임시 변수 - [levites]
|
// NOTE : 임시 변수 - [levites]
|
||||||
// 최종적으로는 무조건 TRUE 형태로 만든다.
|
// 최종적으로는 무조건 TRUE 형태로 만든다.
|
||||||
// 그전에 전 프로젝트의 CDir을 사용하는 곳에서 Extension을 "wav", "gr2" 이런식으로 넣게끔 한다. - [levites]
|
// 그전에 전 프로젝트의 CDir을 사용하는 곳에서 Extension을 "wav", "gr2" 이런식으로 넣게끔 한다. - [levites]
|
||||||
if (bCheckedExtension)
|
if (bCheckedExtension)
|
||||||
{
|
{
|
||||||
std::string strFilter = c_szFilter;
|
std::string strFilter = c_szFilter;
|
||||||
|
@ -72,7 +72,7 @@ int CMemoryTextFileLoader::SplitLine2(DWORD dwLine, CTokenVector* pstTokenVector
|
|||||||
|
|
||||||
pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos));
|
pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos));
|
||||||
|
|
||||||
// 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites]
|
// 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites]
|
||||||
if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
|
if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
|
||||||
break;
|
break;
|
||||||
} while (basePos < c_rstLine.length());
|
} while (basePos < c_rstLine.length());
|
||||||
@ -116,7 +116,7 @@ bool CMemoryTextFileLoader::SplitLine(DWORD dwLine, CTokenVector* pstTokenVector
|
|||||||
|
|
||||||
pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos));
|
pstTokenVector->push_back(c_rstLine.substr(beginPos, endPos - beginPos));
|
||||||
|
|
||||||
// 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites]
|
// 추가 코드. 맨뒤에 탭이 있는 경우를 체크한다. - [levites]
|
||||||
if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
|
if (int(c_rstLine.find_first_not_of(c_szDelimeter, basePos)) < 0)
|
||||||
break;
|
break;
|
||||||
} while (basePos < c_rstLine.length());
|
} while (basePos < c_rstLine.length());
|
||||||
|
@ -85,7 +85,7 @@ BYTE* CMappedFile::AppendDataBlock( const void* pBlock, DWORD dwBlockSize )
|
|||||||
|
|
||||||
void CMappedFile::Destroy()
|
void CMappedFile::Destroy()
|
||||||
{
|
{
|
||||||
if (m_pLZObj) // 압축된 데이터가 이 포인터로 연결 된다
|
if (m_pLZObj) // 압축된 데이터가 이 포인터로 연결 된다
|
||||||
{
|
{
|
||||||
delete m_pLZObj;
|
delete m_pLZObj;
|
||||||
m_pLZObj = NULL;
|
m_pLZObj = NULL;
|
||||||
@ -144,7 +144,7 @@ int CMappedFile::Seek(DWORD offset, int iSeekType)
|
|||||||
return m_seekPosition;
|
return m_seekPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크
|
// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크
|
||||||
//DWORD g_dwCount=0;
|
//DWORD g_dwCount=0;
|
||||||
|
|
||||||
int CMappedFile::Map(const void **dest, int offset, int size)
|
int CMappedFile::Map(const void **dest, int offset, int size)
|
||||||
@ -192,7 +192,7 @@ int CMappedFile::Map(const void **dest, int offset, int size)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크
|
// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크
|
||||||
//g_dwCount++;
|
//g_dwCount++;
|
||||||
//Tracenf("MAPFILE %d", g_dwCount);
|
//Tracenf("MAPFILE %d", g_dwCount);
|
||||||
|
|
||||||
@ -247,7 +247,7 @@ void CMappedFile::Unmap(LPCVOID data)
|
|||||||
{
|
{
|
||||||
if (UnmapViewOfFile(data))
|
if (UnmapViewOfFile(data))
|
||||||
{
|
{
|
||||||
// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크
|
// 2004.09.16.myevan.MemoryMappedFile 98/ME 개수 제한 문제 체크
|
||||||
//g_dwCount--;
|
//g_dwCount--;
|
||||||
//Tracenf("UNMAPFILE %d", g_dwCount);
|
//Tracenf("UNMAPFILE %d", g_dwCount);
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ BOOL ELTimer_Init()
|
|||||||
|
|
||||||
DWORD ELTimer_GetMSec()
|
DWORD ELTimer_GetMSec()
|
||||||
{
|
{
|
||||||
//assert(gs_dwBaseTime!=0 && "ELTimer_Init 를 먼저 실행하세요");
|
//assert(gs_dwBaseTime!=0 && "ELTimer_Init 를 먼저 실행하세요");
|
||||||
//LARGE_INTEGER liTickCount;
|
//LARGE_INTEGER liTickCount;
|
||||||
//QueryPerformanceCounter(&liTickCount);
|
//QueryPerformanceCounter(&liTickCount);
|
||||||
return timeGetTime() - gs_dwBaseTime; //(liTickCount.QuadPart*1000 / gs_liTickCountPerSec.QuadPart)-gs_dwBaseTime;
|
return timeGetTime() - gs_dwBaseTime; //(liTickCount.QuadPart*1000 / gs_liTickCountPerSec.QuadPart)-gs_dwBaseTime;
|
||||||
@ -36,7 +36,7 @@ DWORD ELTimer_GetMSec()
|
|||||||
VOID ELTimer_SetServerMSec(DWORD dwServerTime)
|
VOID ELTimer_SetServerMSec(DWORD dwServerTime)
|
||||||
{
|
{
|
||||||
NANOBEGIN
|
NANOBEGIN
|
||||||
if (0 != dwServerTime) // nanomite를 위한 더미 if
|
if (0 != dwServerTime) // nanomite를 위한 더미 if
|
||||||
{
|
{
|
||||||
gs_dwServerTime = dwServerTime;
|
gs_dwServerTime = dwServerTime;
|
||||||
gs_dwClientTime = CTimer::instance().GetCurrentMillisecond();
|
gs_dwClientTime = CTimer::instance().GetCurrentMillisecond();
|
||||||
@ -70,7 +70,7 @@ CTimer::CTimer()
|
|||||||
ELTimer_Init();
|
ELTimer_Init();
|
||||||
|
|
||||||
NANOBEGIN
|
NANOBEGIN
|
||||||
if (this) // nanomite를 위한 더미 if
|
if (this) // nanomite를 위한 더미 if
|
||||||
{
|
{
|
||||||
m_dwCurrentTime = 0;
|
m_dwCurrentTime = 0;
|
||||||
m_bUseRealTime = true;
|
m_bUseRealTime = true;
|
||||||
|
@ -433,7 +433,7 @@ void MyCreateDirectory(const char* path)
|
|||||||
|
|
||||||
if (strlen(path) >= 3)
|
if (strlen(path) >= 3)
|
||||||
{
|
{
|
||||||
if (*(path + 1) == ':') // C:, D: 같은 경우를 체크
|
if (*(path + 1) == ':') // C:, D: 같은 경우를 체크
|
||||||
path += 3;
|
path += 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,9 +120,9 @@ void CLZObject::BeginCompress(const void * pvIn, UINT uiInLen)
|
|||||||
m_pbIn = (const BYTE *) pvIn;
|
m_pbIn = (const BYTE *) pvIn;
|
||||||
|
|
||||||
// sizeof(SHeader) +
|
// sizeof(SHeader) +
|
||||||
// 암호화를 위한 fourCC 4바이트
|
// 암호화를 위한 fourCC 4바이트
|
||||||
// 압축된 후 만들어질 수 있는 최대 용량 +
|
// 압축된 후 만들어질 수 있는 최대 용량 +
|
||||||
// 암호화를 위한 8 바이트
|
// 암호화를 위한 8 바이트
|
||||||
m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8;
|
m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8;
|
||||||
|
|
||||||
m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize);
|
m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize);
|
||||||
@ -139,9 +139,9 @@ void CLZObject::BeginCompressInBuffer(const void * pvIn, UINT uiInLen, void * /*
|
|||||||
m_pbIn = (const BYTE *) pvIn;
|
m_pbIn = (const BYTE *) pvIn;
|
||||||
|
|
||||||
// sizeof(SHeader) +
|
// sizeof(SHeader) +
|
||||||
// 암호화를 위한 fourCC 4바이트
|
// 암호화를 위한 fourCC 4바이트
|
||||||
// 압축된 후 만들어질 수 있는 최대 용량 +
|
// 압축된 후 만들어질 수 있는 최대 용량 +
|
||||||
// 암호화를 위한 8 바이트
|
// 암호화를 위한 8 바이트
|
||||||
m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8;
|
m_dwBufferSize = sizeof(THeader) + sizeof(DWORD) + (uiInLen + uiInLen / 64 + 16 + 3) + 8;
|
||||||
|
|
||||||
m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize);
|
m_pbBuffer = gs_freeMemMgr.Alloc(m_dwBufferSize);
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* Filename: tea.c
|
* Filename: tea.c
|
||||||
* Description: TEA 암호화 모듈
|
* Description: TEA 암호화 모듈
|
||||||
*
|
*
|
||||||
* Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
|
* Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
|
||||||
*/
|
*/
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
#include "tea.h"
|
#include "tea.h"
|
||||||
@ -10,24 +10,24 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* TEA Encryption Module Instruction
|
* TEA Encryption Module Instruction
|
||||||
* Edited by 김한주 aka. 비엽, Cronan
|
* Edited by 김한주 aka. 비엽, Cronan
|
||||||
*
|
*
|
||||||
* void tea_code(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest)
|
* void tea_code(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest)
|
||||||
* void tea_decode(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest)
|
* void tea_decode(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest)
|
||||||
* 8바이트를 암호/복호화 할때 사용된다. key 는 16 바이트여야 한다.
|
* 8바이트를 암호/복호화 할때 사용된다. key 는 16 바이트여야 한다.
|
||||||
* sz, sy 는 8바이트의 역순으로 대입한다.
|
* sz, sy 는 8바이트의 역순으로 대입한다.
|
||||||
*
|
*
|
||||||
* int tea_decrypt(unsigned long *dest, const unsigned long *src, const unsigned long *key, int size);
|
* int tea_decrypt(unsigned long *dest, const unsigned long *src, const unsigned long *key, int size);
|
||||||
* int tea_encrypt(unsigned long *dest, const unsigned long *src, const unsigned long *key, int size);
|
* int tea_encrypt(unsigned long *dest, const unsigned long *src, const unsigned long *key, int size);
|
||||||
* 한꺼번에 8 바이트 이상을 암호/복호화 할때 사용한다. 만약 size 가
|
* 한꺼번에 8 바이트 이상을 암호/복호화 할때 사용한다. 만약 size 가
|
||||||
* 8의 배수가 아니면 8의 배수로 크기를 "늘려서" 암호화 한다.
|
* 8의 배수가 아니면 8의 배수로 크기를 "늘려서" 암호화 한다.
|
||||||
*
|
*
|
||||||
* ex. tea_code(pdwSrc[1], pdwSrc[0], pdwKey, pdwDest);
|
* ex. tea_code(pdwSrc[1], pdwSrc[0], pdwKey, pdwDest);
|
||||||
* tea_decrypt(pdwDest, pdwSrc, pdwKey, nSize);
|
* tea_decrypt(pdwDest, pdwSrc, pdwKey, nSize);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define TEA_ROUND 32 // 32 를 권장하며, 높을 수록 결과가 난해해 진다.
|
#define TEA_ROUND 32 // 32 를 권장하며, 높을 수록 결과가 난해해 진다.
|
||||||
#define DELTA 0x9E3779B9 // DELTA 값 바꾸지 말것.
|
#define DELTA 0x9E3779B9 // DELTA 값 바꾸지 말것.
|
||||||
|
|
||||||
void tea_code(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest)
|
void tea_code(const unsigned long sz, const unsigned long sy, const unsigned long *key, unsigned long *dest)
|
||||||
{
|
{
|
||||||
|
@ -282,8 +282,8 @@ void CGrannyLODController::AddModel(CGraphicThing * pThing, int iSrcModel, CGran
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// FIXME : CModelInstance::m_pgrnWorldPose를 Update에서 사용하는데,
|
// FIXME : CModelInstance::m_pgrnWorldPose를 Update에서 사용하는데,
|
||||||
// Deform을 하지 않으면 NULL 입니다. 구조가 조금 바뀌어야 할지도.. - [levites]
|
// Deform을 하지 않으면 NULL 입니다. 구조가 조금 바뀌어야 할지도.. - [levites]
|
||||||
pModelInstance->DeformNoSkin(&ms_matIdentity);
|
pModelInstance->DeformNoSkin(&ms_matIdentity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,10 +460,10 @@ void CGrannyLODController::UpdateLODLevel(float fDistanceFromCenter, float fDist
|
|||||||
assert(m_pCurrentModelInstance != NULL);
|
assert(m_pCurrentModelInstance != NULL);
|
||||||
|
|
||||||
|
|
||||||
if (fDistanceFromCenter > LOD_APPLY_MIN) // 중심 LOD 예외 취소
|
if (fDistanceFromCenter > LOD_APPLY_MIN) // 중심 LOD 예외 취소
|
||||||
{
|
{
|
||||||
// 카메라부터 멀어질 수록 fLODRate가 작아진다
|
// 카메라부터 멀어질 수록 fLODRate가 작아진다
|
||||||
// 3개 LOD가 있을때.. 가장 먼게 0, 가까울 수록 숫자가 커진다
|
// 3개 LOD가 있을때.. 가장 먼게 0, 가까울 수록 숫자가 커진다
|
||||||
|
|
||||||
// 100fps 50fps 33fps 25fps 20fps
|
// 100fps 50fps 33fps 25fps 20fps
|
||||||
// 10ms 20ms 30ms 40ms 50ms
|
// 10ms 20ms 30ms 40ms 50ms
|
||||||
|
@ -238,7 +238,7 @@ bool CGrannyMaterial::CreateFromGrannyMaterialPointer(granny_material * pgrnMate
|
|||||||
pgrnOpacityTexture = GrannyGetMaterialTextureByType(m_pgrnMaterial, GrannyOpacityTexture);
|
pgrnOpacityTexture = GrannyGetMaterialTextureByType(m_pgrnMaterial, GrannyOpacityTexture);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Two-Side 렌더링이 필요한 지 검사
|
// Two-Side 렌더링이 필요한 지 검사
|
||||||
{
|
{
|
||||||
granny_int32 twoSided = 0;
|
granny_int32 twoSided = 0;
|
||||||
granny_data_type_definition TwoSidedFieldType[] =
|
granny_data_type_definition TwoSidedFieldType[] =
|
||||||
@ -262,7 +262,7 @@ bool CGrannyMaterial::CreateFromGrannyMaterialPointer(granny_material * pgrnMate
|
|||||||
if (pgrnOpacityTexture)
|
if (pgrnOpacityTexture)
|
||||||
m_roImage[1].SetPointer(__GetImagePointer(pgrnOpacityTexture->FromFileName));
|
m_roImage[1].SetPointer(__GetImagePointer(pgrnOpacityTexture->FromFileName));
|
||||||
|
|
||||||
// 오퍼시티가 있으면 블렌딩 메쉬
|
// 오퍼시티가 있으면 블렌딩 메쉬
|
||||||
if (!m_roImage[1].IsNull())
|
if (!m_roImage[1].IsNull())
|
||||||
m_eType = TYPE_BLEND_PNT;
|
m_eType = TYPE_BLEND_PNT;
|
||||||
else
|
else
|
||||||
@ -285,7 +285,7 @@ void CGrannyMaterial::__ApplyDiffuseRenderState()
|
|||||||
|
|
||||||
if (m_bTwoSideRender)
|
if (m_bTwoSideRender)
|
||||||
{
|
{
|
||||||
// -_-렌더링 프로세스가 좀 구려서... Save & Restore 하면 순서때문에 좀 꼬인다. 귀찮으니 Save & Restore 대신 따로 저장해 둠.
|
// -_-렌더링 프로세스가 좀 구려서... Save & Restore 하면 순서때문에 좀 꼬인다. 귀찮으니 Save & Restore 대신 따로 저장해 둠.
|
||||||
m_dwLastCullRenderStateForTwoSideRendering = STATEMANAGER.GetRenderState(D3DRS_CULLMODE);
|
m_dwLastCullRenderStateForTwoSideRendering = STATEMANAGER.GetRenderState(D3DRS_CULLMODE);
|
||||||
STATEMANAGER.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
|
STATEMANAGER.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
|
||||||
}
|
}
|
||||||
@ -511,7 +511,7 @@ DWORD CGrannyMaterialPalette::GetMaterialCount() const
|
|||||||
/*
|
/*
|
||||||
void CActorInstance::BeginSpecularRender()
|
void CActorInstance::BeginSpecularRender()
|
||||||
{
|
{
|
||||||
// NOTE - Blending해서 찍는 부분은 Specular를 적용시키지 않는다 - [levites]
|
// NOTE - Blending해서 찍는 부분은 Specular를 적용시키지 않는다 - [levites]
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
|
STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
|
||||||
|
|
||||||
STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, D3DXCOLOR(1.0f, 1.0f, 1.0f, m_AddColor.r));
|
STATEMANAGER.SetRenderState(D3DRS_TEXTUREFACTOR, D3DXCOLOR(1.0f, 1.0f, 1.0f, m_AddColor.r));
|
||||||
|
@ -159,7 +159,7 @@ bool CGrannyMesh::LoadTriGroupNodeList(CGrannyMaterialPalette& rkMtrlPal)
|
|||||||
assert(m_triGroupNodes == NULL);
|
assert(m_triGroupNodes == NULL);
|
||||||
|
|
||||||
int mtrlCount = m_pgrnMesh->MaterialBindingCount;
|
int mtrlCount = m_pgrnMesh->MaterialBindingCount;
|
||||||
if (mtrlCount <= 0) // 천의 동굴 2층 크래쉬 발생
|
if (mtrlCount <= 0) // 천의 동굴 2층 크래쉬 발생
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
int GroupNodeCount = GrannyGetMeshTriangleGroupCount(m_pgrnMesh);
|
int GroupNodeCount = GrannyGetMeshTriangleGroupCount(m_pgrnMesh);
|
||||||
|
@ -155,7 +155,7 @@ bool CGrannyModel::LoadMeshs()
|
|||||||
assert(m_meshs == NULL);
|
assert(m_meshs == NULL);
|
||||||
assert(m_pgrnModel != NULL);
|
assert(m_pgrnModel != NULL);
|
||||||
|
|
||||||
if (m_pgrnModel->MeshBindingCount <= 0) // 메쉬가 없는 모델
|
if (m_pgrnModel->MeshBindingCount <= 0) // 메쉬가 없는 모델
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
granny_skeleton * pgrnSkeleton = m_pgrnModel->Skeleton;
|
granny_skeleton * pgrnSkeleton = m_pgrnModel->Skeleton;
|
||||||
|
@ -239,7 +239,7 @@ void CGraphicThingInstance::DrawBoundBox()
|
|||||||
D3DXVECTOR3 vtMax;
|
D3DXVECTOR3 vtMax;
|
||||||
|
|
||||||
SetDiffuseColor(0.0f, 1.0f, 0.0f);
|
SetDiffuseColor(0.0f, 1.0f, 0.0f);
|
||||||
// 캐릭터 꽉차는 바운딩 박스
|
// 캐릭터 꽉차는 바운딩 박스
|
||||||
//GetBoundBox(&vtMin, &vtMax);
|
//GetBoundBox(&vtMin, &vtMax);
|
||||||
//DrawLineCube(vtMin.x, vtMin.y, vtMin.z, vtMax.x, vtMax.y, vtMax.z);
|
//DrawLineCube(vtMin.x, vtMin.y, vtMin.z, vtMax.x, vtMax.y, vtMax.z);
|
||||||
//const CThing::TMeshVector& rmeshVector=mc_pModel->meshVector;
|
//const CThing::TMeshVector& rmeshVector=mc_pModel->meshVector;
|
||||||
|
@ -161,7 +161,7 @@ void CGrannyModelInstance::__CreateMeshMatrices()
|
|||||||
{
|
{
|
||||||
assert(m_pModel != NULL);
|
assert(m_pModel != NULL);
|
||||||
|
|
||||||
if (m_pModel->GetMeshCount() <= 0) // 메쉬가 없는 (카메라 같은) 모델도 간혹 있다..
|
if (m_pModel->GetMeshCount() <= 0) // 메쉬가 없는 (카메라 같은) 모델도 간혹 있다..
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int meshCount = m_pModel->GetMeshCount();
|
int meshCount = m_pModel->GetMeshCount();
|
||||||
@ -274,8 +274,8 @@ const float * CGrannyModelInstance::GetBoneMatrixPointer(int iBone) const
|
|||||||
|
|
||||||
const float * CGrannyModelInstance::GetCompositeBoneMatrixPointer(int iBone) const
|
const float * CGrannyModelInstance::GetCompositeBoneMatrixPointer(int iBone) const
|
||||||
{
|
{
|
||||||
// NOTE : GrannyGetWorldPose4x4는 스케일 값등이 잘못나올 수 있음.. 그래니가 속도를 위해
|
// NOTE : GrannyGetWorldPose4x4는 스케일 값등이 잘못나올 수 있음.. 그래니가 속도를 위해
|
||||||
// GrannyGetWorldPose4x4에 모든 matrix 원소를 제 값으로 넣지 않음
|
// GrannyGetWorldPose4x4에 모든 matrix 원소를 제 값으로 넣지 않음
|
||||||
return GrannyGetWorldPoseComposite4x4(__GetWorldPosePtr(), iBone);
|
return GrannyGetWorldPoseComposite4x4(__GetWorldPosePtr(), iBone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ void CGrannyModelInstance::ChangeMotionPointer(const CGrannyMotion* pMotion, int
|
|||||||
if (!pgrnModelInstance)
|
if (!pgrnModelInstance)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 보간 되는 앞부분을 스킵 하기 위해 LocalTime 을 어느 정도 무시한다. - [levites]
|
// 보간 되는 앞부분을 스킵 하기 위해 LocalTime 을 어느 정도 무시한다. - [levites]
|
||||||
float fSkipTime = 0.3f;
|
float fSkipTime = 0.3f;
|
||||||
float localTime = GetLocalTime() - fSkipTime;
|
float localTime = GetLocalTime() - fSkipTime;
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ void CGrannyModelInstance::DeformNoSkin(const D3DXMATRIX * c_pWorldMatrix)
|
|||||||
// With One Texture
|
// With One Texture
|
||||||
void CGrannyModelInstance::RenderWithOneTexture()
|
void CGrannyModelInstance::RenderWithOneTexture()
|
||||||
{
|
{
|
||||||
// FIXME : Deform, Render, BlendRender를 묶어 상위에서 걸러주는 것이 더 나을 듯 - [levites]
|
// FIXME : Deform, Render, BlendRender를 묶어 상위에서 걸러주는 것이 더 나을 듯 - [levites]
|
||||||
if (IsEmpty())
|
if (IsEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ void CGrannyModelInstance::BlendRenderWithOneTexture()
|
|||||||
// With Two Texture
|
// With Two Texture
|
||||||
void CGrannyModelInstance::RenderWithTwoTexture()
|
void CGrannyModelInstance::RenderWithTwoTexture()
|
||||||
{
|
{
|
||||||
// FIXME : Deform, Render, BlendRender를 묶어 상위에서 걸러주는 것이 더 나을 듯 - [levites]
|
// FIXME : Deform, Render, BlendRender를 묶어 상위에서 걸러주는 것이 더 나을 듯 - [levites]
|
||||||
if (IsEmpty())
|
if (IsEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -342,8 +342,8 @@ bool CGraphicThingInstance::GetBonePosition(int iModelIndex, int iBoneIndex, flo
|
|||||||
*pfz = pfMatrix[14];
|
*pfz = pfMatrix[14];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//iSkelInstance 가 있으면 기본 본에 Link(본이 붙는것)시키고,
|
//iSkelInstance 가 있으면 기본 본에 Link(본이 붙는것)시키고,
|
||||||
//없으면 기본 본에 attach(좌표만 가져다 쓰는것) 됩니다.
|
//없으면 기본 본에 attach(좌표만 가져다 쓰는것) 됩니다.
|
||||||
bool CGraphicThingInstance::SetModelInstance(int iDstModelInstance, int iSrcModelThing, int iSrcModel,int iSkelInstance)
|
bool CGraphicThingInstance::SetModelInstance(int iDstModelInstance, int iSrcModelThing, int iSrcModel,int iSkelInstance)
|
||||||
{
|
{
|
||||||
if (!CheckModelInstanceIndex(iDstModelInstance))
|
if (!CheckModelInstanceIndex(iDstModelInstance))
|
||||||
@ -735,7 +735,7 @@ void CGraphicThingInstance::UpdateLODLevel()
|
|||||||
const D3DXVECTOR3 & c_rv3CameraPosition = pcurCamera->GetEye();
|
const D3DXVECTOR3 & c_rv3CameraPosition = pcurCamera->GetEye();
|
||||||
const D3DXVECTOR3 & c_v3Position = GetPosition();
|
const D3DXVECTOR3 & c_v3Position = GetPosition();
|
||||||
|
|
||||||
// NOTE : 중심으로부터의 거리 계산에 z값 차이는 사용하지 않는다. - [levites]
|
// NOTE : 중심으로부터의 거리 계산에 z값 차이는 사용하지 않는다. - [levites]
|
||||||
CGrannyLODController::FUpdateLODLevel update;
|
CGrannyLODController::FUpdateLODLevel update;
|
||||||
update.fDistanceFromCenter = sqrtf((c_rv3TargetPosition.x - c_v3Position.x) * (c_rv3TargetPosition.x - c_v3Position.x) +
|
update.fDistanceFromCenter = sqrtf((c_rv3TargetPosition.x - c_v3Position.x) * (c_rv3TargetPosition.x - c_v3Position.x) +
|
||||||
(c_rv3TargetPosition.y - c_v3Position.y) * (c_rv3TargetPosition.y - c_v3Position.y));
|
(c_rv3TargetPosition.y - c_v3Position.y) * (c_rv3TargetPosition.y - c_v3Position.y));
|
||||||
|
@ -33,7 +33,7 @@ void CTGAImage::Create(int width, int height)
|
|||||||
m_Header.width = (short) width;
|
m_Header.width = (short) width;
|
||||||
m_Header.height = (short) height;
|
m_Header.height = (short) height;
|
||||||
m_Header.colorBits = 32;
|
m_Header.colorBits = 32;
|
||||||
m_Header.desc = 0x08; // alpha channel 있음
|
m_Header.desc = 0x08; // alpha channel 있음
|
||||||
|
|
||||||
CImage::Create(width, height);
|
CImage::Create(width, height);
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
|
|||||||
|
|
||||||
switch (m_Header.imgType)
|
switch (m_Header.imgType)
|
||||||
{
|
{
|
||||||
case 3: // 알파만 있는 것 (1bytes per pixel, 거의 안쓰임)
|
case 3: // 알파만 있는 것 (1bytes per pixel, 거의 안쓰임)
|
||||||
{
|
{
|
||||||
for (i = 0; i < hxw; ++i)
|
for (i = 0; i < hxw; ++i)
|
||||||
{
|
{
|
||||||
@ -64,7 +64,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // 압축 안된 TGA
|
case 2: // 압축 안된 TGA
|
||||||
{
|
{
|
||||||
if (m_Header.colorBits == 16) // 16bit
|
if (m_Header.colorBits == 16) // 16bit
|
||||||
{
|
{
|
||||||
@ -112,7 +112,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 10: // 압축 된 TGA (RLE)
|
case 10: // 압축 된 TGA (RLE)
|
||||||
{
|
{
|
||||||
BYTE rle;
|
BYTE rle;
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
|
|||||||
{
|
{
|
||||||
rle = (BYTE) *(c_pbMem++); --iSize;
|
rle = (BYTE) *(c_pbMem++); --iSize;
|
||||||
|
|
||||||
if (rle < 0x80) // 압축 안된 곳
|
if (rle < 0x80) // 압축 안된 곳
|
||||||
{
|
{
|
||||||
rle++;
|
rle++;
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ bool CTGAImage::LoadFromMemory(int iSize, const BYTE * c_pbMem)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 압축 된 곳
|
// 압축 된 곳
|
||||||
rle -= 127;
|
rle -= 127;
|
||||||
|
|
||||||
b = (BYTE) *(c_pbMem++); --iSize;
|
b = (BYTE) *(c_pbMem++); --iSize;
|
||||||
@ -315,7 +315,7 @@ bool CTGAImage::SaveToDiskFile(const char* c_szFileName)
|
|||||||
|
|
||||||
fwrite(&m_Header, 18, 1, fp);
|
fwrite(&m_Header, 18, 1, fp);
|
||||||
|
|
||||||
if (m_Header.imgType == 10) // RLE 압축으로 저장
|
if (m_Header.imgType == 10) // RLE 압축으로 저장
|
||||||
{
|
{
|
||||||
DWORD * data = GetBasePointer();
|
DWORD * data = GetBasePointer();
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ bool CAttributeData::OnLoad(int /*iSize*/, const void * c_pvBuf)
|
|||||||
{
|
{
|
||||||
if (!c_pvBuf)
|
if (!c_pvBuf)
|
||||||
{
|
{
|
||||||
// NOTE: 파일이 존재하지 않으면 다른곳에서 그래픽 모델을 기반으로 충돌 데이터를 생성하니 리소스를 파괴하지 않고 유지시킴.
|
// NOTE: 파일이 존재하지 않으면 다른곳에서 그래픽 모델을 기반으로 충돌 데이터를 생성하니 리소스를 파괴하지 않고 유지시킴.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,7 +438,7 @@ void CCamera::RotateEyeAroundTarget(float fPitchDegree, float fRollDegree)
|
|||||||
|
|
||||||
D3DXMATRIX matRot, matRotPitch, matRotRoll;
|
D3DXMATRIX matRot, matRotPitch, matRotRoll;
|
||||||
|
|
||||||
// 머리위로 넘어가기 막기...
|
// 머리위로 넘어가기 막기...
|
||||||
if (m_fPitch + fPitchDegree > 80.0f)
|
if (m_fPitch + fPitchDegree > 80.0f)
|
||||||
{
|
{
|
||||||
fPitchDegree = 80.0f - m_fPitch;
|
fPitchDegree = 80.0f - m_fPitch;
|
||||||
@ -593,7 +593,7 @@ bool CCameraManager::isCurrentCamera(unsigned char ucCameraNum)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 잡스러운 함수들...
|
// 잡스러운 함수들...
|
||||||
bool CCameraManager::AddCamera(unsigned char ucCameraNum)
|
bool CCameraManager::AddCamera(unsigned char ucCameraNum)
|
||||||
{
|
{
|
||||||
if(m_CameraMap.end() != m_CameraMap.find(ucCameraNum))
|
if(m_CameraMap.end() != m_CameraMap.find(ucCameraNum))
|
||||||
|
@ -230,7 +230,7 @@ bool CSphereCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamicSp
|
|||||||
{
|
{
|
||||||
if (square_distance_between_linesegment_and_point(s.v3LastPosition,s.v3Position,m_attribute.v3Position) < (m_attribute.fRadius+s.fRadius)*(m_attribute.fRadius+s.fRadius))
|
if (square_distance_between_linesegment_and_point(s.v3LastPosition,s.v3Position,m_attribute.v3Position) < (m_attribute.fRadius+s.fRadius)*(m_attribute.fRadius+s.fRadius))
|
||||||
{
|
{
|
||||||
// NOTE : 거리가 가까워 졌을때만.. - [levites]
|
// NOTE : 거리가 가까워 졌을때만.. - [levites]
|
||||||
if (GetVector3Distance(s.v3Position, m_attribute.v3Position) <
|
if (GetVector3Distance(s.v3Position, m_attribute.v3Position) <
|
||||||
GetVector3Distance(s.v3LastPosition, m_attribute.v3Position))
|
GetVector3Distance(s.v3LastPosition, m_attribute.v3Position))
|
||||||
return true;
|
return true;
|
||||||
@ -321,7 +321,7 @@ bool CPlaneCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamicSph
|
|||||||
if (D3DXVec3Dot(&v3QuadPosition2, &m_attribute.v3InsideVector[2]) > - s.fRadius/*0.0f*/)
|
if (D3DXVec3Dot(&v3QuadPosition2, &m_attribute.v3InsideVector[2]) > - s.fRadius/*0.0f*/)
|
||||||
if (D3DXVec3Dot(&v3QuadPosition2, &m_attribute.v3InsideVector[3]) > - s.fRadius/*0.0f*/)
|
if (D3DXVec3Dot(&v3QuadPosition2, &m_attribute.v3InsideVector[3]) > - s.fRadius/*0.0f*/)
|
||||||
{
|
{
|
||||||
// NOTE : 거리가 가까워 졌을때만.. - [levites]
|
// NOTE : 거리가 가까워 졌을때만.. - [levites]
|
||||||
if (fabs(D3DXVec3Dot(&(s.v3Position - m_attribute.v3Position), &m_attribute.v3Normal)) <
|
if (fabs(D3DXVec3Dot(&(s.v3Position - m_attribute.v3Position), &m_attribute.v3Normal)) <
|
||||||
fabs(D3DXVec3Dot(&(s.v3LastPosition - m_attribute.v3Position), &m_attribute.v3Normal)))
|
fabs(D3DXVec3Dot(&(s.v3LastPosition - m_attribute.v3Position), &m_attribute.v3Normal)))
|
||||||
return true;
|
return true;
|
||||||
@ -471,14 +471,14 @@ bool CCylinderCollisionInstance::OnMovementCollisionDynamicSphere(const CDynamic
|
|||||||
{
|
{
|
||||||
if (CollideCylinderVSDynamicSphere(m_attribute, s))
|
if (CollideCylinderVSDynamicSphere(m_attribute, s))
|
||||||
{
|
{
|
||||||
// NOTE : 거리가 가까워 졌을때만.. - [levites]
|
// NOTE : 거리가 가까워 졌을때만.. - [levites]
|
||||||
if (GetVector3Distance(s.v3Position, m_attribute.v3Position) <
|
if (GetVector3Distance(s.v3Position, m_attribute.v3Position) <
|
||||||
GetVector3Distance(s.v3LastPosition, m_attribute.v3Position))
|
GetVector3Distance(s.v3LastPosition, m_attribute.v3Position))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// NOTE : 이동 거리가 클 경우 빈틈없이 (원 크기 단위로) 이동하면서 전부 체크 해 본다 - [levites]
|
// NOTE : 이동 거리가 클 경우 빈틈없이 (원 크기 단위로) 이동하면서 전부 체크 해 본다 - [levites]
|
||||||
D3DXVECTOR3 v3Distance = s.v3Position - s.v3LastPosition;
|
D3DXVECTOR3 v3Distance = s.v3Position - s.v3LastPosition;
|
||||||
float fDistance = D3DXVec3Length(&v3Distance);
|
float fDistance = D3DXVec3Length(&v3Distance);
|
||||||
if (s.fRadius<=0.0001f)
|
if (s.fRadius<=0.0001f)
|
||||||
|
@ -93,7 +93,7 @@ void CCullingManager::Reset()
|
|||||||
void CCullingManager::Update()
|
void CCullingManager::Update()
|
||||||
{
|
{
|
||||||
// TODO : update each object
|
// TODO : update each object
|
||||||
// 하지말고 각자 하게 해보자
|
// 하지말고 각자 하게 해보자
|
||||||
|
|
||||||
//DWORD time = ELTimer_GetMSec();
|
//DWORD time = ELTimer_GetMSec();
|
||||||
//Reset();
|
//Reset();
|
||||||
|
@ -79,7 +79,7 @@ void CFileLoaderThread::Shutdown()
|
|||||||
}
|
}
|
||||||
while (!bRet);
|
while (!bRet);
|
||||||
|
|
||||||
WaitForSingleObject(m_hThread, 10000); // 쓰레드가 종료 되기를 10초 기다림
|
WaitForSingleObject(m_hThread, 10000); // 쓰레드가 종료 되기를 10초 기다림
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT CFileLoaderThread::Execute(void * /*pvArg*/)
|
UINT CFileLoaderThread::Execute(void * /*pvArg*/)
|
||||||
|
@ -75,13 +75,13 @@ int CGraphicBase::ms_iWavingPower;
|
|||||||
DWORD CGraphicBase::ms_dwFlashingEndTime;
|
DWORD CGraphicBase::ms_dwFlashingEndTime;
|
||||||
D3DXCOLOR CGraphicBase::ms_FlashingColor;
|
D3DXCOLOR CGraphicBase::ms_FlashingColor;
|
||||||
|
|
||||||
// Terrain picking용 Ray... CCamera 이용하는 버전.. 기존의 Ray와 통합 필요...
|
// Terrain picking용 Ray... CCamera 이용하는 버전.. 기존의 Ray와 통합 필요...
|
||||||
CRay CGraphicBase::ms_Ray;
|
CRay CGraphicBase::ms_Ray;
|
||||||
bool CGraphicBase::ms_bSupportDXT = true;
|
bool CGraphicBase::ms_bSupportDXT = true;
|
||||||
bool CGraphicBase::ms_isLowTextureMemory = false;
|
bool CGraphicBase::ms_isLowTextureMemory = false;
|
||||||
bool CGraphicBase::ms_isHighTextureMemory = false;
|
bool CGraphicBase::ms_isHighTextureMemory = false;
|
||||||
|
|
||||||
// 2004.11.18.myevan.DynamicVertexBuffer로 교체
|
// 2004.11.18.myevan.DynamicVertexBuffer로 교체
|
||||||
/*
|
/*
|
||||||
std::vector<TIndex> CGraphicBase::ms_lineIdxVector;
|
std::vector<TIndex> CGraphicBase::ms_lineIdxVector;
|
||||||
std::vector<TIndex> CGraphicBase::ms_lineTriIdxVector;
|
std::vector<TIndex> CGraphicBase::ms_lineTriIdxVector;
|
||||||
|
@ -183,7 +183,7 @@ static DWORD s_MaxTextureWidth, s_MaxTextureHeight;
|
|||||||
|
|
||||||
BOOL EL3D_ConfirmDevice(D3DCAPS9& rkD3DCaps, UINT uBehavior, D3DFORMAT /*eD3DFmt*/)
|
BOOL EL3D_ConfirmDevice(D3DCAPS9& rkD3DCaps, UINT uBehavior, D3DFORMAT /*eD3DFmt*/)
|
||||||
{
|
{
|
||||||
// PUREDEVICE는 GetTransform / GetViewport 등이 되지 않는다.
|
// PUREDEVICE는 GetTransform / GetViewport 등이 되지 않는다.
|
||||||
if (uBehavior & D3DCREATE_PUREDEVICE)
|
if (uBehavior & D3DCREATE_PUREDEVICE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -369,7 +369,7 @@ RETRY:
|
|||||||
ms_iD3DAdapterInfo,
|
ms_iD3DAdapterInfo,
|
||||||
D3DDEVTYPE_HAL,
|
D3DDEVTYPE_HAL,
|
||||||
hWnd,
|
hWnd,
|
||||||
// 2004. 1. 9 myevan 버텍스 프로세싱 방식 자동 선택 추가
|
// 2004. 1. 9 myevan 버텍스 프로세싱 방식 자동 선택 추가
|
||||||
pkD3DModeInfo->m_dwD3DBehavior,
|
pkD3DModeInfo->m_dwD3DBehavior,
|
||||||
&ms_d3dPresentParameter,
|
&ms_d3dPresentParameter,
|
||||||
&ms_lpd3dDevice)))
|
&ms_lpd3dDevice)))
|
||||||
@ -393,7 +393,7 @@ RETRY:
|
|||||||
if (ErrorCorrection)
|
if (ErrorCorrection)
|
||||||
return CREATE_DEVICE;
|
return CREATE_DEVICE;
|
||||||
|
|
||||||
// 2004. 1. 9 myevan 큰의미 없는 코드인듯.. 에러나면 표시하고 종료하자
|
// 2004. 1. 9 myevan 큰의미 없는 코드인듯.. 에러나면 표시하고 종료하자
|
||||||
iReflashRate = 0;
|
iReflashRate = 0;
|
||||||
++ErrorCorrection;
|
++ErrorCorrection;
|
||||||
iRet = CREATE_REFRESHRATE;
|
iRet = CREATE_REFRESHRATE;
|
||||||
|
@ -116,7 +116,7 @@ void CGraphicExpandedImageInstance::OnRender()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제
|
// 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제
|
||||||
if (CGraphicBase::SetPDTStream(vertices, 4))
|
if (CGraphicBase::SetPDTStream(vertices, 4))
|
||||||
{
|
{
|
||||||
CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT);
|
CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT);
|
||||||
|
@ -213,7 +213,7 @@ CGraphicFontTexture::TCharacterInfomation* CGraphicFontTexture::UpdateCharacterI
|
|||||||
wchar_t keyValue = code.second;
|
wchar_t keyValue = code.second;
|
||||||
|
|
||||||
if (keyValue == 0x08)
|
if (keyValue == 0x08)
|
||||||
keyValue = L' '; // 탭은 공백으로 바꾼다 (아랍 출력시 탭 사용: NAME:\tTEXT -> TEXT\t:NAME 로 전환됨 )
|
keyValue = L' '; // 탭은 공백으로 바꾼다 (아랍 출력시 탭 사용: NAME:\tTEXT -> TEXT\t:NAME 로 전환됨 )
|
||||||
|
|
||||||
ABCFLOAT stABC;
|
ABCFLOAT stABC;
|
||||||
SIZE size;
|
SIZE size;
|
||||||
|
@ -68,7 +68,7 @@ bool CGraphicImage::OnLoad(int iSize, const void * c_pvBuf)
|
|||||||
|
|
||||||
m_imageTexture.SetFileName(CResource::GetFileName());
|
m_imageTexture.SetFileName(CResource::GetFileName());
|
||||||
|
|
||||||
// 특정 컴퓨터에서 Unknown으로 '안'하면 튕기는 현상이 있음-_-; -비엽
|
// 특정 컴퓨터에서 Unknown으로 '안'하면 튕기는 현상이 있음-_-; -비엽
|
||||||
if (!m_imageTexture.CreateFromMemoryFile(iSize, c_pvBuf, D3DFMT_UNKNOWN, m_dwFilter))
|
if (!m_imageTexture.CreateFromMemoryFile(iSize, c_pvBuf, D3DFMT_UNKNOWN, m_dwFilter))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ void CGraphicImageInstance::OnRender()
|
|||||||
vertices[3].texCoord = TTextureCoordinate(eu, ev);
|
vertices[3].texCoord = TTextureCoordinate(eu, ev);
|
||||||
vertices[3].diffuse = m_DiffuseColor;
|
vertices[3].diffuse = m_DiffuseColor;
|
||||||
|
|
||||||
// 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제
|
// 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제
|
||||||
if (CGraphicBase::SetPDTStream(vertices, 4))
|
if (CGraphicBase::SetPDTStream(vertices, 4))
|
||||||
{
|
{
|
||||||
CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT);
|
CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT);
|
||||||
@ -207,7 +207,7 @@ void CGraphicImageInstance::Initialize()
|
|||||||
|
|
||||||
void CGraphicImageInstance::Destroy()
|
void CGraphicImageInstance::Destroy()
|
||||||
{
|
{
|
||||||
m_roImage.SetPointer(NULL); // CRef 에서 레퍼런스 카운트가 떨어져야 함.
|
m_roImage.SetPointer(NULL); // CRef 에서 레퍼런스 카운트가 떨어져야 함.
|
||||||
Initialize();
|
Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ bool CGraphicImageTexture::CreateDeviceObjects()
|
|||||||
|
|
||||||
if (m_stFileName.empty())
|
if (m_stFileName.empty())
|
||||||
{
|
{
|
||||||
// 폰트 텍스쳐
|
// 폰트 텍스쳐
|
||||||
if (FAILED(ms_lpd3dDevice->CreateTexture(m_width, m_height, 1, 0, m_d3dFmt, D3DPOOL_MANAGED, &m_lpd3dTexture, NULL)))
|
if (FAILED(ms_lpd3dDevice->CreateTexture(m_width, m_height, 1, 0, m_d3dFmt, D3DPOOL_MANAGED, &m_lpd3dTexture, NULL)))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -97,18 +97,18 @@ struct LightComp
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// NOTE : FlushLight후 렌더링
|
// NOTE : FlushLight후 렌더링
|
||||||
// 그 후 반드시 RestoreLight를 해줘야만 한다.
|
// 그 후 반드시 RestoreLight를 해줘야만 한다.
|
||||||
void CLightManager::FlushLight()
|
void CLightManager::FlushLight()
|
||||||
{
|
{
|
||||||
Update();
|
Update();
|
||||||
|
|
||||||
m_LightSortVector.clear();
|
m_LightSortVector.clear();
|
||||||
|
|
||||||
// NOTE: Dynamic과 Static을 분리 시키고 CenterPosition이 바뀔때마다 Static만
|
// NOTE: Dynamic과 Static을 분리 시키고 CenterPosition이 바뀔때마다 Static만
|
||||||
// 다시 Flush 하는 식으로 최적화 할 수 있다. - [levites]
|
// 다시 Flush 하는 식으로 최적화 할 수 있다. - [levites]
|
||||||
|
|
||||||
// light들의 거리를 추출해 정렬한다.
|
// light들의 거리를 추출해 정렬한다.
|
||||||
TLightMap::iterator itor = m_LightMap.begin();
|
TLightMap::iterator itor = m_LightMap.begin();
|
||||||
|
|
||||||
for (; itor != m_LightMap.end(); ++itor)
|
for (; itor != m_LightMap.end(); ++itor)
|
||||||
@ -124,7 +124,7 @@ void CLightManager::FlushLight()
|
|||||||
// quick sort lights
|
// quick sort lights
|
||||||
std::sort(m_LightSortVector.begin(), m_LightSortVector.end(), LightComp());
|
std::sort(m_LightSortVector.begin(), m_LightSortVector.end(), LightComp());
|
||||||
|
|
||||||
// NOTE - 거리로 정렬된 라이트를 Limit 갯수 만큼 제한해서 켜준다.
|
// NOTE - 거리로 정렬된 라이트를 Limit 갯수 만큼 제한해서 켜준다.
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, TRUE);
|
STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, TRUE);
|
||||||
|
|
||||||
for (DWORD k = 0; k < min(m_dwLimitLightCount, m_LightSortVector.size()); ++k)
|
for (DWORD k = 0; k < min(m_dwLimitLightCount, m_LightSortVector.size()); ++k)
|
||||||
|
@ -241,7 +241,7 @@ void CGraphicMarkInstance::Initialize()
|
|||||||
|
|
||||||
void CGraphicMarkInstance::Destroy()
|
void CGraphicMarkInstance::Destroy()
|
||||||
{
|
{
|
||||||
m_roImage.SetPointer(NULL); // CRef 에서 레퍼런스 카운트가 떨어져야 함.
|
m_roImage.SetPointer(NULL); // CRef 에서 레퍼런스 카운트가 떨어져야 함.
|
||||||
Initialize();
|
Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ void CScreen::RenderBox3d(float sx, float sy, float sz, float ex, float ey, floa
|
|||||||
{ ex, ey, ez, ms_diffuseColor, 0.0f, 0.0f }, // 3
|
{ ex, ey, ez, ms_diffuseColor, 0.0f, 0.0f }, // 3
|
||||||
|
|
||||||
{ sx, ey, ez, ms_diffuseColor, 0.0f, 0.0f }, // 2
|
{ sx, ey, ez, ms_diffuseColor, 0.0f, 0.0f }, // 2
|
||||||
{ ex+1.0f, ey, ez, ms_diffuseColor, 0.0f, 0.0f } // 3, (x가 1증가된 3)
|
{ ex+1.0f, ey, ez, ms_diffuseColor, 0.0f, 0.0f } // 3, (x가 1증가된 3)
|
||||||
};
|
};
|
||||||
|
|
||||||
// 2004.11.18.myevan.DrawIndexPrimitiveUP -> DynamicVertexBuffer
|
// 2004.11.18.myevan.DrawIndexPrimitiveUP -> DynamicVertexBuffer
|
||||||
@ -510,11 +510,11 @@ void CScreen::SetCursorPosition(int x, int y, int hres, int vres)
|
|||||||
ms_vtPickRayOrig.y = matViewInverse._42;
|
ms_vtPickRayOrig.y = matViewInverse._42;
|
||||||
ms_vtPickRayOrig.z = matViewInverse._43;
|
ms_vtPickRayOrig.z = matViewInverse._43;
|
||||||
|
|
||||||
// // 2003. 9. 9 동현 추가
|
// // 2003. 9. 9 동현 추가
|
||||||
// // 지형 picking을 위한 뻘짓... ㅡㅡ; 위에 것과 통합 필요...
|
// // 지형 picking을 위한 뻘짓... ㅡㅡ; 위에 것과 통합 필요...
|
||||||
ms_Ray.SetStartPoint(ms_vtPickRayOrig);
|
ms_Ray.SetStartPoint(ms_vtPickRayOrig);
|
||||||
ms_Ray.SetDirection(-ms_vtPickRayDir, 51200.0f);
|
ms_Ray.SetDirection(-ms_vtPickRayDir, 51200.0f);
|
||||||
// // 2003. 9. 9 동현 추가
|
// // 2003. 9. 9 동현 추가
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CScreen::GetCursorPosition(float* px, float* py, float* pz)
|
bool CScreen::GetCursorPosition(float* px, float* py, float* pz)
|
||||||
|
@ -38,9 +38,9 @@ bool CGraphicText::OnLoad(int /*iSize*/, const void* /*c_pvBuf*/)
|
|||||||
bool bItalic = false;
|
bool bItalic = false;
|
||||||
|
|
||||||
// format
|
// format
|
||||||
// 굴림.fnt "\xB1\xBC\xB8\xB2" 폰트 기본 사이즈 12 로 로딩
|
// 굴림.fnt "\xB1\xBC\xB8\xB2" 폰트 기본 사이즈 12 로 로딩
|
||||||
// 굴림:18.fnt "\xB1\xBC\xB8\xB2" 폰트 사이즈 18 로 로딩
|
// 굴림:18.fnt "\xB1\xBC\xB8\xB2" 폰트 사이즈 18 로 로딩
|
||||||
// 굴림:14i.fnt "\xB1\xBC\xB8\xB2" 폰트 사이즈 14 & 이탤릭으로 로딩
|
// 굴림:14i.fnt "\xB1\xBC\xB8\xB2" 폰트 사이즈 14 & 이탤릭으로 로딩
|
||||||
const char * p = strrchr(GetFileName(), ':');
|
const char * p = strrchr(GetFileName(), ':');
|
||||||
|
|
||||||
if (p)
|
if (p)
|
||||||
|
@ -121,7 +121,7 @@ int ReadToken(const char* token)
|
|||||||
|
|
||||||
void CGraphicTextInstance::Update()
|
void CGraphicTextInstance::Update()
|
||||||
{
|
{
|
||||||
if (m_isUpdate) // 문자열이 바뀌었을 때만 업데이트 한다.
|
if (m_isUpdate) // 문자열이 바뀌었을 때만 업데이트 한다.
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_roText.IsNull())
|
if (m_roText.IsNull())
|
||||||
@ -139,7 +139,7 @@ void CGraphicTextInstance::Update()
|
|||||||
|
|
||||||
UINT defCodePage = GetDefaultCodePage();
|
UINT defCodePage = GetDefaultCodePage();
|
||||||
|
|
||||||
UINT dataCodePage = defCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패
|
UINT dataCodePage = defCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패
|
||||||
|
|
||||||
CGraphicFontTexture::TCharacterInfomation* pSpaceInfo = pFontTexture->GetCharacterInfomation(dataCodePage, ' ');
|
CGraphicFontTexture::TCharacterInfomation* pSpaceInfo = pFontTexture->GetCharacterInfomation(dataCodePage, ' ');
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ void CGraphicTextInstance::Update()
|
|||||||
bool isEnglish = true;
|
bool isEnglish = true;
|
||||||
int nEnglishBase = wArabicTextLen - 1;
|
int nEnglishBase = wArabicTextLen - 1;
|
||||||
|
|
||||||
//<<하이퍼 링크>>
|
//<<하이퍼 링크>>
|
||||||
int x = 0;
|
int x = 0;
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
@ -194,7 +194,7 @@ void CGraphicTextInstance::Update()
|
|||||||
std::wstring hyperlinkBuffer;
|
std::wstring hyperlinkBuffer;
|
||||||
int no_hyperlink = 0;
|
int no_hyperlink = 0;
|
||||||
|
|
||||||
// 심볼로 끝나면 아랍어 모드로 시작해야한다
|
// 심볼로 끝나면 아랍어 모드로 시작해야한다
|
||||||
if (Arabic_IsInSymbol(wArabicText[wArabicTextLen - 1]))
|
if (Arabic_IsInSymbol(wArabicText[wArabicTextLen - 1]))
|
||||||
{
|
{
|
||||||
isEnglish = false;
|
isEnglish = false;
|
||||||
@ -208,24 +208,24 @@ void CGraphicTextInstance::Update()
|
|||||||
if (isEnglish)
|
if (isEnglish)
|
||||||
{
|
{
|
||||||
|
|
||||||
// <<심볼의 경우 (ex. 기호, 공백)>> -> 영어 모드 유지.
|
// <<심볼의 경우 (ex. 기호, 공백)>> -> 영어 모드 유지.
|
||||||
// <<(심볼이 아닌 것들 : 숫자, 영어, 아랍어)>>
|
// <<(심볼이 아닌 것들 : 숫자, 영어, 아랍어)>>
|
||||||
// (1) 맨 앞의 심볼 or
|
// (1) 맨 앞의 심볼 or
|
||||||
// (2)
|
// (2)
|
||||||
// 1) 앞 글자가 아랍어 아님 &&
|
// 1) 앞 글자가 아랍어 아님 &&
|
||||||
// 2) 뒷 글자가 아랍어 아님 &&
|
// 2) 뒷 글자가 아랍어 아님 &&
|
||||||
// 3) 뒷 글자가 심볼'|'이 아님 &&
|
// 3) 뒷 글자가 심볼'|'이 아님 &&
|
||||||
// or
|
// or
|
||||||
// (3) 현재 심볼이 '|'
|
// (3) 현재 심볼이 '|'
|
||||||
// <<아랍어 모드로 넘어가는 경우 : 심볼에서.>>
|
// <<아랍어 모드로 넘어가는 경우 : 심볼에서.>>
|
||||||
// 1) 앞글자 아랍어
|
// 1) 앞글자 아랍어
|
||||||
// 2) 뒷글자 아랍어
|
// 2) 뒷글자 아랍어
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
if (Arabic_IsInSymbol(wArabicChar) && (
|
if (Arabic_IsInSymbol(wArabicChar) && (
|
||||||
(i == 0) ||
|
(i == 0) ||
|
||||||
(i > 0 &&
|
(i > 0 &&
|
||||||
!(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1])) && //앞글자, 뒷글자가 아랍어 아님.
|
!(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1])) && //앞글자, 뒷글자가 아랍어 아님.
|
||||||
wArabicText[i+1] != '|'
|
wArabicText[i+1] != '|'
|
||||||
) ||
|
) ||
|
||||||
wArabicText[i] == '|'
|
wArabicText[i] == '|'
|
||||||
@ -234,10 +234,10 @@ void CGraphicTextInstance::Update()
|
|||||||
// pass
|
// pass
|
||||||
int temptest = 1;
|
int temptest = 1;
|
||||||
}
|
}
|
||||||
// (1)아랍어이거나 (2)아랍어 다음의 심볼이라면 아랍어 모드 전환
|
// (1)아랍어이거나 (2)아랍어 다음의 심볼이라면 아랍어 모드 전환
|
||||||
else if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar))
|
else if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar))
|
||||||
{
|
{
|
||||||
//그 전까지의 영어를 그린다.
|
//그 전까지의 영어를 그린다.
|
||||||
for (int e = i + 1; e <= nEnglishBase;) {
|
for (int e = i + 1; e <= nEnglishBase;) {
|
||||||
int ret = GetTextTag(&wArabicText[e], wArabicTextLen - e, len, hyperlinkBuffer);
|
int ret = GetTextTag(&wArabicText[e], wArabicTextLen - e, len, hyperlinkBuffer);
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ void CGraphicTextInstance::Update()
|
|||||||
kHyperlink.ex += charWidth;
|
kHyperlink.ex += charWidth;
|
||||||
//x += charWidth;
|
//x += charWidth;
|
||||||
|
|
||||||
//기존 추가한 하이퍼링크의 좌표 수정.
|
//기존 추가한 하이퍼링크의 좌표 수정.
|
||||||
for (int j = 1; j <= no_hyperlink; j++)
|
for (int j = 1; j <= no_hyperlink; j++)
|
||||||
{
|
{
|
||||||
if(m_hyperlinkVector.size() < j)
|
if(m_hyperlinkVector.size() < j)
|
||||||
@ -279,7 +279,7 @@ void CGraphicTextInstance::Update()
|
|||||||
if (hyperlinkStep == 1)
|
if (hyperlinkStep == 1)
|
||||||
{
|
{
|
||||||
++hyperlinkStep;
|
++hyperlinkStep;
|
||||||
kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치
|
kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -299,7 +299,7 @@ void CGraphicTextInstance::Update()
|
|||||||
int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor);
|
int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor);
|
||||||
kHyperlink.ex += charWidth;
|
kHyperlink.ex += charWidth;
|
||||||
|
|
||||||
//기존 추가한 하이퍼링크의 좌표 수정.
|
//기존 추가한 하이퍼링크의 좌표 수정.
|
||||||
for (int j = 1; j <= no_hyperlink; j++)
|
for (int j = 1; j <= no_hyperlink; j++)
|
||||||
{
|
{
|
||||||
if(m_hyperlinkVector.size() < j)
|
if(m_hyperlinkVector.size() < j)
|
||||||
@ -313,16 +313,16 @@ void CGraphicTextInstance::Update()
|
|||||||
isEnglish = false;
|
isEnglish = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else //[[[아랍어 모드]]]
|
else //[[[아랍어 모드]]]
|
||||||
{
|
{
|
||||||
// 아랍어이거나 아랍어 출력중 나오는 심볼이라면
|
// 아랍어이거나 아랍어 출력중 나오는 심볼이라면
|
||||||
if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar))
|
if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar))
|
||||||
{
|
{
|
||||||
int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor);
|
int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor);
|
||||||
kHyperlink.ex += charWidth;
|
kHyperlink.ex += charWidth;
|
||||||
x += charWidth;
|
x += charWidth;
|
||||||
|
|
||||||
//기존 추가한 하이퍼링크의 좌표 수정.
|
//기존 추가한 하이퍼링크의 좌표 수정.
|
||||||
for (int j = 1; j <= no_hyperlink; j++)
|
for (int j = 1; j <= no_hyperlink; j++)
|
||||||
{
|
{
|
||||||
if(m_hyperlinkVector.size() < j)
|
if(m_hyperlinkVector.size() < j)
|
||||||
@ -333,7 +333,7 @@ void CGraphicTextInstance::Update()
|
|||||||
tempLink.sx += charWidth;
|
tempLink.sx += charWidth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else //영어이거나, 영어 다음에 나오는 심볼이라면,
|
else //영어이거나, 영어 다음에 나오는 심볼이라면,
|
||||||
{
|
{
|
||||||
nEnglishBase = i;
|
nEnglishBase = i;
|
||||||
isEnglish = true;
|
isEnglish = true;
|
||||||
@ -355,7 +355,7 @@ void CGraphicTextInstance::Update()
|
|||||||
int charWidth = __DrawCharacter(pFontTexture, dataCodePage, wArabicText[e], dwColor);
|
int charWidth = __DrawCharacter(pFontTexture, dataCodePage, wArabicText[e], dwColor);
|
||||||
kHyperlink.ex += charWidth;
|
kHyperlink.ex += charWidth;
|
||||||
|
|
||||||
//기존 추가한 하이퍼링크의 좌표 수정.
|
//기존 추가한 하이퍼링크의 좌표 수정.
|
||||||
for (int j = 1; j <= no_hyperlink; j++)
|
for (int j = 1; j <= no_hyperlink; j++)
|
||||||
{
|
{
|
||||||
if(m_hyperlinkVector.size() < j)
|
if(m_hyperlinkVector.size() < j)
|
||||||
@ -383,7 +383,7 @@ void CGraphicTextInstance::Update()
|
|||||||
if (hyperlinkStep == 1)
|
if (hyperlinkStep == 1)
|
||||||
{
|
{
|
||||||
++hyperlinkStep;
|
++hyperlinkStep;
|
||||||
kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치
|
kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -401,7 +401,7 @@ void CGraphicTextInstance::Update()
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // 아랍외 다른 지역.
|
else // 아랍외 다른 지역.
|
||||||
{
|
{
|
||||||
int x = 0;
|
int x = 0;
|
||||||
int len;
|
int len;
|
||||||
@ -440,7 +440,7 @@ void CGraphicTextInstance::Update()
|
|||||||
if (hyperlinkStep == 1)
|
if (hyperlinkStep == 1)
|
||||||
{
|
{
|
||||||
++hyperlinkStep;
|
++hyperlinkStep;
|
||||||
kHyperlink.ex = kHyperlink.sx = x; // 실제 텍스트가 시작되는 위치
|
kHyperlink.ex = kHyperlink.sx = x; // 실제 텍스트가 시작되는 위치
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -460,7 +460,7 @@ void CGraphicTextInstance::Update()
|
|||||||
if (token < end)
|
if (token < end)
|
||||||
{
|
{
|
||||||
int newCodePage = ReadToken(token);
|
int newCodePage = ReadToken(token);
|
||||||
dataCodePage = newCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패
|
dataCodePage = newCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패
|
||||||
begin = token + 5;
|
begin = token + 5;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -570,7 +570,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
|
|
||||||
CGraphicFontTexture::TCharacterInfomation* pCurCharInfo;
|
CGraphicFontTexture::TCharacterInfomation* pCurCharInfo;
|
||||||
|
|
||||||
// 테두리
|
// 테두리
|
||||||
if (m_isOutline)
|
if (m_isOutline)
|
||||||
{
|
{
|
||||||
fCurX=fStanX;
|
fCurX=fStanX;
|
||||||
@ -586,7 +586,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
fFontHeight=float(pCurCharInfo->height);
|
fFontHeight=float(pCurCharInfo->height);
|
||||||
fFontAdvance=float(pCurCharInfo->advance);
|
fFontAdvance=float(pCurCharInfo->advance);
|
||||||
|
|
||||||
// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
|
// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
|
||||||
if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth)
|
if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth)
|
||||||
{
|
{
|
||||||
if (m_isMultiLine)
|
if (m_isMultiLine)
|
||||||
@ -636,7 +636,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
akVertex[2].y=fFontSy-feather;
|
akVertex[2].y=fFontSy-feather;
|
||||||
akVertex[3].y=fFontEy+feather;
|
akVertex[3].y=fFontEy+feather;
|
||||||
|
|
||||||
// 왼
|
// 왼
|
||||||
akVertex[0].x=fFontSx-fFontHalfWeight-feather;
|
akVertex[0].x=fFontSx-fFontHalfWeight-feather;
|
||||||
akVertex[1].x=fFontSx-fFontHalfWeight-feather;
|
akVertex[1].x=fFontSx-fFontHalfWeight-feather;
|
||||||
akVertex[2].x=fFontEx-fFontHalfWeight+feather;
|
akVertex[2].x=fFontEx-fFontHalfWeight+feather;
|
||||||
@ -646,7 +646,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
|
STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
|
||||||
|
|
||||||
|
|
||||||
// 오른
|
// 오른
|
||||||
akVertex[0].x=fFontSx+fFontHalfWeight-feather;
|
akVertex[0].x=fFontSx+fFontHalfWeight-feather;
|
||||||
akVertex[1].x=fFontSx+fFontHalfWeight-feather;
|
akVertex[1].x=fFontSx+fFontHalfWeight-feather;
|
||||||
akVertex[2].x=fFontEx+fFontHalfWeight+feather;
|
akVertex[2].x=fFontEx+fFontHalfWeight+feather;
|
||||||
@ -660,7 +660,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
akVertex[2].x=fFontEx+feather;
|
akVertex[2].x=fFontEx+feather;
|
||||||
akVertex[3].x=fFontEx+feather;
|
akVertex[3].x=fFontEx+feather;
|
||||||
|
|
||||||
// 위
|
// 위
|
||||||
akVertex[0].y=fFontSy-fFontHalfWeight-feather;
|
akVertex[0].y=fFontSy-fFontHalfWeight-feather;
|
||||||
akVertex[1].y=fFontEy-fFontHalfWeight+feather;
|
akVertex[1].y=fFontEy-fFontHalfWeight+feather;
|
||||||
akVertex[2].y=fFontSy-fFontHalfWeight-feather;
|
akVertex[2].y=fFontSy-fFontHalfWeight-feather;
|
||||||
@ -670,7 +670,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
if (CGraphicBase::SetPDTStream((SPDTVertex*)akVertex, 4))
|
if (CGraphicBase::SetPDTStream((SPDTVertex*)akVertex, 4))
|
||||||
STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
|
STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
|
||||||
|
|
||||||
// 아래
|
// 아래
|
||||||
akVertex[0].y=fFontSy+fFontHalfWeight-feather;
|
akVertex[0].y=fFontSy+fFontHalfWeight-feather;
|
||||||
akVertex[1].y=fFontEy+fFontHalfWeight+feather;
|
akVertex[1].y=fFontEy+fFontHalfWeight+feather;
|
||||||
akVertex[2].y=fFontSy+fFontHalfWeight-feather;
|
akVertex[2].y=fFontSy+fFontHalfWeight-feather;
|
||||||
@ -684,7 +684,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 메인 폰트
|
// 메인 폰트
|
||||||
fCurX=fStanX;
|
fCurX=fStanX;
|
||||||
fCurY=fStanY;
|
fCurY=fStanY;
|
||||||
fFontMaxHeight=0.0f;
|
fFontMaxHeight=0.0f;
|
||||||
@ -698,7 +698,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
fFontMaxHeight=max(fFontHeight, pCurCharInfo->height);
|
fFontMaxHeight=max(fFontHeight, pCurCharInfo->height);
|
||||||
fFontAdvance=float(pCurCharInfo->advance);
|
fFontAdvance=float(pCurCharInfo->advance);
|
||||||
|
|
||||||
// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
|
// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
|
||||||
if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth)
|
if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth)
|
||||||
{
|
{
|
||||||
if (m_isMultiLine)
|
if (m_isMultiLine)
|
||||||
@ -811,9 +811,9 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
sy -= float(m_textHeight) / 2.0f;
|
sy -= float(m_textHeight) / 2.0f;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// 최적화 사항
|
// 최적화 사항
|
||||||
// 같은텍스쳐를 사용한다면... STRIP을 구성하고, 텍스쳐가 변경되거나 끝나면 DrawPrimitive를 호출해
|
// 같은텍스쳐를 사용한다면... STRIP을 구성하고, 텍스쳐가 변경되거나 끝나면 DrawPrimitive를 호출해
|
||||||
// 최대한 숫자를 줄이도록하자!
|
// 최대한 숫자를 줄이도록하자!
|
||||||
|
|
||||||
TPDTVertex vertices[4];
|
TPDTVertex vertices[4];
|
||||||
vertices[0].diffuse = diffuse;
|
vertices[0].diffuse = diffuse;
|
||||||
@ -865,13 +865,13 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||||||
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, dwFogEnable);
|
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, dwFogEnable);
|
||||||
STATEMANAGER.SetRenderState(D3DRS_LIGHTING, dwLighting);
|
STATEMANAGER.SetRenderState(D3DRS_LIGHTING, dwLighting);
|
||||||
|
|
||||||
//금강경 링크 띄워주는 부분.
|
//금강경 링크 띄워주는 부분.
|
||||||
if (m_hyperlinkVector.size() != 0)
|
if (m_hyperlinkVector.size() != 0)
|
||||||
{
|
{
|
||||||
int lx = gs_mx - m_v3Position.x;
|
int lx = gs_mx - m_v3Position.x;
|
||||||
int ly = gs_my - m_v3Position.y;
|
int ly = gs_my - m_v3Position.y;
|
||||||
|
|
||||||
//아랍은 좌표 부호를 바꿔준다.
|
//아랍은 좌표 부호를 바꿔준다.
|
||||||
if (GetDefaultCodePage() == CP_ARABIC) {
|
if (GetDefaultCodePage() == CP_ARABIC) {
|
||||||
lx = -lx;
|
lx = -lx;
|
||||||
ly = -ly + m_textHeight;
|
ly = -ly + m_textHeight;
|
||||||
@ -1063,7 +1063,7 @@ WORD CGraphicTextInstance::GetTextLineCount()
|
|||||||
float fFontAdvance=float(pCurCharInfo->advance);
|
float fFontAdvance=float(pCurCharInfo->advance);
|
||||||
//float fFontHeight=float(pCurCharInfo->height);
|
//float fFontHeight=float(pCurCharInfo->height);
|
||||||
|
|
||||||
// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
|
// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
|
||||||
if (fx+fFontWidth > m_fLimitWidth)
|
if (fx+fFontWidth > m_fLimitWidth)
|
||||||
{
|
{
|
||||||
fx = 0.0f;
|
fx = 0.0f;
|
||||||
@ -1110,7 +1110,7 @@ void CGraphicTextInstance::__Initialize()
|
|||||||
m_vAlign = VERTICAL_ALIGN_TOP;
|
m_vAlign = VERTICAL_ALIGN_TOP;
|
||||||
|
|
||||||
m_iMax = 0;
|
m_iMax = 0;
|
||||||
m_fLimitWidth = 1600.0f; // NOTE : 해상도의 최대치. 이보다 길게 쓸 일이 있을까? - [levites]
|
m_fLimitWidth = 1600.0f; // NOTE : 해상도의 최대치. 이보다 길게 쓸 일이 있을까? - [levites]
|
||||||
|
|
||||||
m_isCursor = false;
|
m_isCursor = false;
|
||||||
m_isSecret = false;
|
m_isSecret = false;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
bool CStaticVertexBuffer::Create(int vtxCount, DWORD fvf, bool /*isManaged*/)
|
bool CStaticVertexBuffer::Create(int vtxCount, DWORD fvf, bool /*isManaged*/)
|
||||||
{
|
{
|
||||||
// 무조건 MANAGED 모드
|
// 무조건 MANAGED 모드
|
||||||
return CGraphicVertexBuffer::Create(vtxCount, fvf, D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED);
|
return CGraphicVertexBuffer::Create(vtxCount, fvf, D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -819,7 +819,7 @@ void CIME::SetCurPos(int offset)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// offset은 보여지는 텍스트의 위치로 온다. 따라서 새로 계산해야함.
|
// offset은 보여지는 텍스트의 위치로 온다. 따라서 새로 계산해야함.
|
||||||
//ms_curpos = min(ms_lastpos, offset);
|
//ms_curpos = min(ms_lastpos, offset);
|
||||||
ms_curpos = min(ms_lastpos, GetTextTagInternalPosFromRenderPos(m_wText, ms_lastpos, offset));
|
ms_curpos = min(ms_lastpos, GetTextTagInternalPosFromRenderPos(m_wText, ms_lastpos, offset));
|
||||||
}
|
}
|
||||||
@ -1503,8 +1503,8 @@ void CIME::CheckInputLocale()
|
|||||||
ms_wszCurrentIndicator[1] = towlower(szLang[1]);
|
ms_wszCurrentIndicator[1] = towlower(szLang[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 아랍어에서 영어로 변경시 코드 페이지를 바꾸지 않는다
|
// 아랍어에서 영어로 변경시 코드 페이지를 바꾸지 않는다
|
||||||
// 내용도 지우지 않는다.
|
// 내용도 지우지 않는다.
|
||||||
if(ms_uOutputCodePage != 1256) {
|
if(ms_uOutputCodePage != 1256) {
|
||||||
ms_uOutputCodePage = ms_uInputCodePage;
|
ms_uOutputCodePage = ms_uInputCodePage;
|
||||||
Clear();
|
Clear();
|
||||||
@ -2147,7 +2147,7 @@ LRESULT CIME::WMComposition(HWND hWnd, UINT /*uiMsg*/, WPARAM /*wParam*/, LPARAM
|
|||||||
AttributeProcess(hImc);
|
AttributeProcess(hImc);
|
||||||
if(lParam&GCS_COMPSTR)
|
if(lParam&GCS_COMPSTR)
|
||||||
{
|
{
|
||||||
if (ms_uOutputCodePage == 950) // 대만 주음 입력 처리
|
if (ms_uOutputCodePage == 950) // 대만 주음 입력 처리
|
||||||
{
|
{
|
||||||
if (lParam&GCS_COMPATTR)
|
if (lParam&GCS_COMPATTR)
|
||||||
CompositionProcessBuilding(hImc);
|
CompositionProcessBuilding(hImc);
|
||||||
|
@ -72,7 +72,7 @@ bool CInputKeyboard::InitializeKeyboard(HWND hWnd)
|
|||||||
if (FAILED(hr = ms_lpKeyboard->SetDataFormat(&c_dfDIKeyboard)))
|
if (FAILED(hr = ms_lpKeyboard->SetDataFormat(&c_dfDIKeyboard)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Alt + F4를 위해 비독점 모드로 - [levites]
|
// Alt + F4를 위해 비독점 모드로 - [levites]
|
||||||
// DWORD dwCoopFlags = DISCL_FOREGROUND | DISCL_EXCLUSIVE;
|
// DWORD dwCoopFlags = DISCL_FOREGROUND | DISCL_EXCLUSIVE;
|
||||||
// DWORD dwCoopFlags = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND;
|
// DWORD dwCoopFlags = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND;
|
||||||
DWORD dwCoopFlags = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
|
DWORD dwCoopFlags = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
|
||||||
@ -99,7 +99,7 @@ void CInputKeyboard::UpdateKeyboard()
|
|||||||
{
|
{
|
||||||
hr = ms_lpKeyboard->Acquire();
|
hr = ms_lpKeyboard->Acquire();
|
||||||
|
|
||||||
// 현재 어플리케이션이 비활성화 되어 있어 입력을 받을 수 없다.
|
// 현재 어플리케이션이 비활성화 되어 있어 입력을 받을 수 없다.
|
||||||
//if (hr == DIERR_OTHERAPPHASPRIO || hr == DIERR_NOTACQUIRED);
|
//if (hr == DIERR_OTHERAPPHASPRIO || hr == DIERR_NOTACQUIRED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,7 @@ void CLensFlare::DrawBeforeFlare()
|
|||||||
STATEMANAGER.SaveRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
|
STATEMANAGER.SaveRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
|
STATEMANAGER.SaveRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
|
||||||
/*
|
/*
|
||||||
if (m_fBeforeBright != 0.0f && m_bDrawFlare && m_bDrawBrightScreen && false) // ¿Ø false?
|
if (m_fBeforeBright != 0.0f && m_bDrawFlare && m_bDrawBrightScreen && false) // 왠 false?
|
||||||
{
|
{
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, m_fBeforeBright);
|
glColor4f(1.0f, 1.0f, 1.0f, m_fBeforeBright);
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
@ -131,8 +131,8 @@ int CResource::ConvertPathName(const char * c_szPathName, char * pszRetPathName,
|
|||||||
|
|
||||||
void CResource::SetFileName(const char* c_szFileName)
|
void CResource::SetFileName(const char* c_szFileName)
|
||||||
{
|
{
|
||||||
// 2004. 2. 1. myevan. 쓰레드가 사용되는 상황에서 static 변수는 사용하지 않는것이 좋다.
|
// 2004. 2. 1. myevan. 쓰레드가 사용되는 상황에서 static 변수는 사용하지 않는것이 좋다.
|
||||||
// 2004. 2. 1. myevan. 파일 이름 처리를 std::string 사용
|
// 2004. 2. 1. myevan. 파일 이름 처리를 std::string 사용
|
||||||
m_stFileName=c_szFileName;
|
m_stFileName=c_szFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,9 +10,9 @@
|
|||||||
|
|
||||||
int g_iLoadingDelayTime = 20;
|
int g_iLoadingDelayTime = 20;
|
||||||
|
|
||||||
const long c_Deleting_Wait_Time = 30000; // 삭제 대기 시간 (30초)
|
const long c_Deleting_Wait_Time = 30000; // 삭제 대기 시간 (30초)
|
||||||
const long c_DeletingCountPerFrame = 30; // 프레임당 체크 리소스 갯수
|
const long c_DeletingCountPerFrame = 30; // 프레임당 체크 리소스 갯수
|
||||||
const long c_Reference_Decrease_Wait_Time = 30000; // 선로딩 리소스의 해제 대기 시간 (30초)
|
const long c_Reference_Decrease_Wait_Time = 30000; // 선로딩 리소스의 해제 대기 시간 (30초)
|
||||||
|
|
||||||
CFileLoaderThread CResourceManager::ms_loadingThread;
|
CFileLoaderThread CResourceManager::ms_loadingThread;
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ void CResourceManager::ProcessBackgroundLoading()
|
|||||||
ms_loadingThread.Request(stFileName);
|
ms_loadingThread.Request(stFileName);
|
||||||
m_WaitingMap.insert(TResourceRequestMap::value_type(dwFileCRC, stFileName));
|
m_WaitingMap.insert(TResourceRequestMap::value_type(dwFileCRC, stFileName));
|
||||||
itor = m_RequestMap.erase(itor);
|
itor = m_RequestMap.erase(itor);
|
||||||
//break; // NOTE: 여기서 break 하면 천천히 로딩 된다.
|
//break; // NOTE: 여기서 break 하면 천천히 로딩 된다.
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD dwCurrentTime = ELTimer_GetMSec();
|
DWORD dwCurrentTime = ELTimer_GetMSec();
|
||||||
@ -74,7 +74,7 @@ void CResourceManager::ProcessBackgroundLoading()
|
|||||||
pResource->OnLoad(pData->dwSize, pData->pvBuf);
|
pResource->OnLoad(pData->dwSize, pData->pvBuf);
|
||||||
pResource->AddReferenceOnly();
|
pResource->AddReferenceOnly();
|
||||||
|
|
||||||
// 여기서 올라간 레퍼런스 카운트를 일정 시간이 지난 뒤에 풀어주기 위하여
|
// 여기서 올라간 레퍼런스 카운트를 일정 시간이 지난 뒤에 풀어주기 위하여
|
||||||
m_pResRefDecreaseWaitingMap.insert(TResourceRefDecreaseWaitingMap::value_type(dwCurrentTime, pResource));
|
m_pResRefDecreaseWaitingMap.insert(TResourceRefDecreaseWaitingMap::value_type(dwCurrentTime, pResource));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -85,7 +85,7 @@ void CResourceManager::ProcessBackgroundLoading()
|
|||||||
delete pData;
|
delete pData;
|
||||||
}
|
}
|
||||||
|
|
||||||
// DO : 일정 시간이 지나고 난뒤 미리 로딩해 두었던 리소스의 레퍼런스 카운트를 감소 시킨다 - [levites]
|
// DO : 일정 시간이 지나고 난뒤 미리 로딩해 두었던 리소스의 레퍼런스 카운트를 감소 시킨다 - [levites]
|
||||||
long lCurrentTime = ELTimer_GetMSec();
|
long lCurrentTime = ELTimer_GetMSec();
|
||||||
|
|
||||||
TResourceRefDecreaseWaitingMap::iterator itorRef = m_pResRefDecreaseWaitingMap.begin();
|
TResourceRefDecreaseWaitingMap::iterator itorRef = m_pResRefDecreaseWaitingMap.begin();
|
||||||
@ -233,7 +233,7 @@ CResource * CResourceManager::GetTypeResourcePointer(const char * c_szFileName,
|
|||||||
DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile);
|
DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile);
|
||||||
CResource * pResource = FindResourcePointer(dwFileCRC);
|
CResource * pResource = FindResourcePointer(dwFileCRC);
|
||||||
|
|
||||||
if (pResource) // 이미 리소스가 있으면 리턴 한다.
|
if (pResource) // 이미 리소스가 있으면 리턴 한다.
|
||||||
return pResource;
|
return pResource;
|
||||||
|
|
||||||
CResource * (*newFunc) (const char *) = NULL;
|
CResource * (*newFunc) (const char *) = NULL;
|
||||||
@ -283,7 +283,7 @@ CResource * CResourceManager::GetResourcePointer(const char * c_szFileName)
|
|||||||
DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile);
|
DWORD dwFileCRC = __GetFileCRC(c_szFileName, &c_pszFile);
|
||||||
CResource * pResource = FindResourcePointer(dwFileCRC);
|
CResource * pResource = FindResourcePointer(dwFileCRC);
|
||||||
|
|
||||||
if (pResource) // 이미 리소스가 있으면 리턴 한다.
|
if (pResource) // 이미 리소스가 있으면 리턴 한다.
|
||||||
return pResource;
|
return pResource;
|
||||||
|
|
||||||
const char * pcFileExt = strrchr(c_pszFile, '.');
|
const char * pcFileExt = strrchr(c_pszFile, '.');
|
||||||
|
@ -272,7 +272,7 @@ void CSkyBox::SetCloudTexture(const char * c_szFileName)
|
|||||||
CGraphicImageInstance * pGraphicImageInstance = GenerateTexture(c_szFileName);
|
CGraphicImageInstance * pGraphicImageInstance = GenerateTexture(c_szFileName);
|
||||||
m_GraphicImageInstanceMap.insert(TGraphicImageInstanceMap::value_type(m_FaceCloud.m_strfacename, pGraphicImageInstance));
|
m_GraphicImageInstanceMap.insert(TGraphicImageInstanceMap::value_type(m_FaceCloud.m_strfacename, pGraphicImageInstance));
|
||||||
|
|
||||||
// 이거 안쓰는거 같은데요? [cronan]
|
// 이거 안쓰는거 같은데요? [cronan]
|
||||||
// CGraphicImage * pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer("D:\\Ymir Work\\special/cloudalpha.tga");
|
// CGraphicImage * pImage = (CGraphicImage *) CResourceManager::Instance().GetResourcePointer("D:\\Ymir Work\\special/cloudalpha.tga");
|
||||||
// m_CloudAlphaImageInstance.SetImagePointer(pImage);
|
// m_CloudAlphaImageInstance.SetImagePointer(pImage);
|
||||||
}
|
}
|
||||||
@ -803,7 +803,7 @@ void CSkyBox::Update()
|
|||||||
|
|
||||||
void CSkyBox::Render()
|
void CSkyBox::Render()
|
||||||
{
|
{
|
||||||
// 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리
|
// 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, TRUE);
|
STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, TRUE);
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE);
|
STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE);
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE);
|
STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE);
|
||||||
@ -872,7 +872,7 @@ void CSkyBox::RenderCloud()
|
|||||||
if (!pCloudGraphicImageInstance)
|
if (!pCloudGraphicImageInstance)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리
|
// 2004.01.25 myevan 처리를 렌더링 후반으로 옮기고, DepthTest 처리
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, TRUE);
|
STATEMANAGER.SaveRenderState(D3DRS_ZENABLE, TRUE);
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE);
|
STATEMANAGER.SaveRenderState(D3DRS_ZWRITEENABLE, FALSE);
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE);
|
STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, FALSE);
|
||||||
|
@ -19,7 +19,7 @@ int GetTextTag(const wchar_t * src, int maxLen, int & tagLen, std::wstring & ext
|
|||||||
extraInfo.assign(++cur, 8);
|
extraInfo.assign(++cur, 8);
|
||||||
return TEXT_TAG_COLOR;
|
return TEXT_TAG_COLOR;
|
||||||
}
|
}
|
||||||
else if (*cur == L'|') // ||는 |로 표시한다.
|
else if (*cur == L'|') // ||는 |로 표시한다.
|
||||||
{
|
{
|
||||||
tagLen = 2;
|
tagLen = 2;
|
||||||
return TEXT_TAG_TAG;
|
return TEXT_TAG_TAG;
|
||||||
@ -29,7 +29,7 @@ int GetTextTag(const wchar_t * src, int maxLen, int & tagLen, std::wstring & ext
|
|||||||
tagLen = 2;
|
tagLen = 2;
|
||||||
return TEXT_TAG_RESTORE_COLOR;
|
return TEXT_TAG_RESTORE_COLOR;
|
||||||
}
|
}
|
||||||
else if (*cur == L'H') // hyperlink |Hitem:10000:0:0:0:0|h[이름]|h
|
else if (*cur == L'H') // hyperlink |Hitem:10000:0:0:0:0|h[이름]|h
|
||||||
{
|
{
|
||||||
tagLen = 2;
|
tagLen = 2;
|
||||||
return TEXT_TAG_HYPERLINK_START;
|
return TEXT_TAG_HYPERLINK_START;
|
||||||
@ -154,20 +154,20 @@ int FindColorTagStartPosition(const wchar_t * src, int src_len)
|
|||||||
|
|
||||||
const wchar_t * cur = src;
|
const wchar_t * cur = src;
|
||||||
|
|
||||||
// |r의 경우
|
// |r의 경우
|
||||||
if (*cur == L'r' && *(cur - 1) == L'|')
|
if (*cur == L'r' && *(cur - 1) == L'|')
|
||||||
{
|
{
|
||||||
int len = src_len;
|
int len = src_len;
|
||||||
|
|
||||||
// ||r은 무시
|
// ||r은 무시
|
||||||
if (len >= 2 && *(cur - 2) == L'|')
|
if (len >= 2 && *(cur - 2) == L'|')
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
cur -= 2;
|
cur -= 2;
|
||||||
len -= 2;
|
len -= 2;
|
||||||
|
|
||||||
// |c까지 찾아서 |위치까지 리턴한다.
|
// |c까지 찾아서 |위치까지 리턴한다.
|
||||||
while (len > 1) // 최소 2자를 검사해야 된다.
|
while (len > 1) // 최소 2자를 검사해야 된다.
|
||||||
{
|
{
|
||||||
if (*cur == L'c' && *(cur - 1) == L'|')
|
if (*cur == L'c' && *(cur - 1) == L'|')
|
||||||
return (src - cur) + 1;
|
return (src - cur) + 1;
|
||||||
@ -175,9 +175,9 @@ int FindColorTagStartPosition(const wchar_t * src, int src_len)
|
|||||||
--cur;
|
--cur;
|
||||||
--len;
|
--len;
|
||||||
}
|
}
|
||||||
return (src_len); // 못찾으면 전부;;
|
return (src_len); // 못찾으면 전부;;
|
||||||
}
|
}
|
||||||
// ||의 경우
|
// ||의 경우
|
||||||
else if (*cur == L'|' && *(cur - 1) == L'|')
|
else if (*cur == L'|' && *(cur - 1) == L'|')
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -332,7 +332,7 @@ void base64_decode(const char * str,char * resultStr)
|
|||||||
{
|
{
|
||||||
i=0;
|
i=0;
|
||||||
strcpy(szDest, "");
|
strcpy(szDest, "");
|
||||||
while(nCount<length && i<4) // 4개의 바이트를 얻는다.
|
while(nCount<length && i<4) // 4개의 바이트를 얻는다.
|
||||||
{
|
{
|
||||||
r = str[nCount++];
|
r = str[nCount++];
|
||||||
result = __base64_get(r);
|
result = __base64_get(r);
|
||||||
@ -340,13 +340,13 @@ void base64_decode(const char * str,char * resultStr)
|
|||||||
{
|
{
|
||||||
if(result!=-1)
|
if(result!=-1)
|
||||||
szDest[i++] = result;
|
szDest[i++] = result;
|
||||||
else szDest[i++] = '@'; // It's end (64번은 디코딩시 사용되지 않기 때문)
|
else szDest[i++] = '@'; // It's end (64번은 디코딩시 사용되지 않기 때문)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i==4) // 4개의 소스를 모두 얻어냈다. 디코드 시작
|
if(i==4) // 4개의 소스를 모두 얻어냈다. 디코드 시작
|
||||||
{
|
{
|
||||||
if( nCount+3 >= length ) // 데이터의 끝에 도달했다.
|
if( nCount+3 >= length ) // 데이터의 끝에 도달했다.
|
||||||
{
|
{
|
||||||
if( szDest[1] == '@' )
|
if( szDest[1] == '@' )
|
||||||
{
|
{
|
||||||
|
@ -220,11 +220,11 @@ bool Group::GetArg(const char *c_arg_base, int arg_len, TArgList & argList)
|
|||||||
{
|
{
|
||||||
isValue = true;
|
isValue = true;
|
||||||
}
|
}
|
||||||
// 값이 아니고, 이름이 시작되지 않았을 경우 빈칸은 건너 뛴다.
|
// 값이 아니고, 이름이 시작되지 않았을 경우 빈칸은 건너 뛴다.
|
||||||
else if (!isValue && iNameLen == 0 && isspace((unsigned char) c))
|
else if (!isValue && iNameLen == 0 && isspace((unsigned char) c))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
// 엔터는 건너 뛴다
|
// 엔터는 건너 뛴다
|
||||||
else if (c == '\r' || c == '\n')
|
else if (c == '\r' || c == '\n')
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -350,12 +350,12 @@ bool Group::Create(const std::string & stSource)
|
|||||||
memcpy(box_data, data_begin, data_len);
|
memcpy(box_data, data_begin, data_len);
|
||||||
box_data[data_len] = '\0';
|
box_data[data_len] = '\0';
|
||||||
|
|
||||||
data_len = LocaleString_RightTrim(box_data, data_len); // 오른쪽 빈칸 자르기
|
data_len = LocaleString_RightTrim(box_data, data_len); // 오른쪽 빈칸 자르기
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const char* space = LocaleString_FindChar(box_data, data_len, ' ');
|
const char* space = LocaleString_FindChar(box_data, data_len, ' ');
|
||||||
if (space) // 인자가 있음
|
if (space) // 인자가 있음
|
||||||
{
|
{
|
||||||
int name_len = space - box_data;
|
int name_len = space - box_data;
|
||||||
cmd.name.assign(box_data, name_len);
|
cmd.name.assign(box_data, name_len);
|
||||||
@ -371,7 +371,7 @@ bool Group::Create(const std::string & stSource)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // 인자가 없으므로 모든 스트링이 명령어다.
|
else // 인자가 없으므로 모든 스트링이 명령어다.
|
||||||
{
|
{
|
||||||
cmd.name.assign(box_data);
|
cmd.name.assign(box_data);
|
||||||
cmd.argList.clear();
|
cmd.argList.clear();
|
||||||
|
@ -258,7 +258,7 @@ size_t Arabic_MakeShape(wchar_t* src, size_t srcLen, wchar_t* dst, size_t dstLen
|
|||||||
|
|
||||||
if (Arabic_IsInMap(cur))
|
if (Arabic_IsInMap(cur))
|
||||||
{
|
{
|
||||||
// 이전 글자 얻어내기
|
// 이전 글자 얻어내기
|
||||||
wchar_t prev = 0;
|
wchar_t prev = 0;
|
||||||
{
|
{
|
||||||
size_t prevIndex = srcIndex;
|
size_t prevIndex = srcIndex;
|
||||||
@ -282,7 +282,7 @@ size_t Arabic_MakeShape(wchar_t* src, size_t srcLen, wchar_t* dst, size_t dstLen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 다음 글자 얻어내기
|
// 다음 글자 얻어내기
|
||||||
wchar_t next = 0;
|
wchar_t next = 0;
|
||||||
{
|
{
|
||||||
size_t nextIndex = srcIndex;
|
size_t nextIndex = srcIndex;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "StringCodec_Vietnamese.h"
|
#include "StringCodec_Vietnamese.h"
|
||||||
|
|
||||||
#pragma warning(disable: 4310) // char 짤림 경고 무시
|
#pragma warning(disable: 4310) // char 짤림 경고 무시
|
||||||
|
@ -254,7 +254,7 @@ bool CEterPack::Create(CEterFileDict& rkFileDict, const char * dbname, const cha
|
|||||||
|
|
||||||
m_bReadOnly = bReadOnly;
|
m_bReadOnly = bReadOnly;
|
||||||
|
|
||||||
// bReadOnly 모드가 아니고 데이터 베이스가 열린다면 생성 실패
|
// bReadOnly 모드가 아니고 데이터 베이스가 열린다면 생성 실패
|
||||||
if (!CreateIndexFile())
|
if (!CreateIndexFile())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ bool CEterPack::DecryptIV(DWORD dwPanamaKey)
|
|||||||
if (m_stIV_Panama.length() != 32)
|
if (m_stIV_Panama.length() != 32)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (m_bDecrypedIV) // 이미 암호화가 풀렸으면 다시 처리 안함
|
if (m_bDecrypedIV) // 이미 암호화가 풀렸으면 다시 처리 안함
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
DWORD* ivs = (DWORD*)&m_stIV_Panama[0];
|
DWORD* ivs = (DWORD*)&m_stIV_Panama[0];
|
||||||
@ -474,7 +474,7 @@ bool CEterPack::__BuildIndex(CEterFileDict& rkFileDict, bool bOverwrite)
|
|||||||
|
|
||||||
m_DataPositionMap.insert(TDataPositionMap::value_type(index->filename_crc, index));
|
m_DataPositionMap.insert(TDataPositionMap::value_type(index->filename_crc, index));
|
||||||
|
|
||||||
if (bOverwrite) // 서버 연동 패킹 파일은 나중에 들어오지만 최상위로 등록해야한다
|
if (bOverwrite) // 서버 연동 패킹 파일은 나중에 들어오지만 최상위로 등록해야한다
|
||||||
rkFileDict.UpdateItem(this, index);
|
rkFileDict.UpdateItem(this, index);
|
||||||
else
|
else
|
||||||
rkFileDict.InsertItem(this, index);
|
rkFileDict.InsertItem(this, index);
|
||||||
@ -492,7 +492,7 @@ bool CEterPack::__BuildIndex(CEterFileDict& rkFileDict, bool bOverwrite)
|
|||||||
//
|
//
|
||||||
//void CEterPack::ClearDataMemoryMap()
|
//void CEterPack::ClearDataMemoryMap()
|
||||||
//{
|
//{
|
||||||
// // m_file이 data file이다...
|
// // m_file이 data file이다...
|
||||||
// m_file.Destroy();
|
// m_file.Destroy();
|
||||||
// m_tLastAccessTime = 0;
|
// m_tLastAccessTime = 0;
|
||||||
// m_bIsDataLoaded = false;
|
// m_bIsDataLoaded = false;
|
||||||
@ -516,8 +516,8 @@ bool CEterPack::Get(CMappedFile& out_file, const char * filename, LPCVOID * data
|
|||||||
// m_bIsDataLoaded = true;
|
// m_bIsDataLoaded = true;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
// 기존에는 CEterPack에서 epk를 memory map에 올려놓고, 요청이 오면 그 부분을 링크해서 넘겨 줬었는데,
|
// 기존에는 CEterPack에서 epk를 memory map에 올려놓고, 요청이 오면 그 부분을 링크해서 넘겨 줬었는데,
|
||||||
// 이제는 요청이 오면, 필요한 부분만 memory map에 올리고, 요청이 끝나면 해제하게 함.
|
// 이제는 요청이 오면, 필요한 부분만 memory map에 올리고, 요청이 끝나면 해제하게 함.
|
||||||
out_file.Create(m_stDataFileName.c_str(), data, index->data_position, index->data_size);
|
out_file.Create(m_stDataFileName.c_str(), data, index->data_position, index->data_size);
|
||||||
|
|
||||||
bool bIsSecurityCheckRequired = ( index->compressed_type == COMPRESSED_TYPE_SECURITY ||
|
bool bIsSecurityCheckRequired = ( index->compressed_type == COMPRESSED_TYPE_SECURITY ||
|
||||||
@ -982,15 +982,15 @@ bool CEterPack::Put(const char * filename, LPCVOID data, long len, BYTE packType
|
|||||||
data_crc = GetCRC32((const char *) data, len);
|
data_crc = GetCRC32((const char *) data, len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 기존 데이터가 있으면..
|
// 기존 데이터가 있으면..
|
||||||
if (pIndex)
|
if (pIndex)
|
||||||
{
|
{
|
||||||
// 기존 data 크기가 넣을 데이터 크기를 수용할 수 있다면
|
// 기존 data 크기가 넣을 데이터 크기를 수용할 수 있다면
|
||||||
if (pIndex->real_data_size >= len)
|
if (pIndex->real_data_size >= len)
|
||||||
{
|
{
|
||||||
++m_map_indexRefCount[pIndex->id];
|
++m_map_indexRefCount[pIndex->id];
|
||||||
|
|
||||||
// 길이가 틀리거나, checksum이 틀릴 때만 저장 한다.
|
// 길이가 틀리거나, checksum이 틀릴 때만 저장 한다.
|
||||||
if ( (pIndex->data_size != len) ||
|
if ( (pIndex->data_size != len) ||
|
||||||
#ifdef CHECKSUM_CHECK_MD5
|
#ifdef CHECKSUM_CHECK_MD5
|
||||||
(memcmp( pIndex->MD5Digest, context.digest, 16 ) != 0) )
|
(memcmp( pIndex->MD5Digest, context.digest, 16 ) != 0) )
|
||||||
@ -1022,13 +1022,13 @@ bool CEterPack::Put(const char * filename, LPCVOID data, long len, BYTE packType
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 기존 데이터 크기가 새로 들어갈 것 보다 적다면, 새로 인덱스를 할당해
|
// 기존 데이터 크기가 새로 들어갈 것 보다 적다면, 새로 인덱스를 할당해
|
||||||
// 넣어야 한다. 원래 있던 인덱스는 비워 둔다.
|
// 넣어야 한다. 원래 있던 인덱스는 비워 둔다.
|
||||||
PushFreeIndex(pIndex);
|
PushFreeIndex(pIndex);
|
||||||
WriteIndex(fileIndex, pIndex);
|
WriteIndex(fileIndex, pIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 새 데이터
|
// 새 데이터
|
||||||
pIndex = NewIndex(fileIndex, filename, len);
|
pIndex = NewIndex(fileIndex, filename, len);
|
||||||
pIndex->data_size = len;
|
pIndex->data_size = len;
|
||||||
|
|
||||||
@ -1077,7 +1077,7 @@ bool CEterPack::CreateIndexFile()
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// 파일이 없으므로 새로 만든다.
|
// 파일이 없으므로 새로 만든다.
|
||||||
//
|
//
|
||||||
fp = fopen(m_indexFileName, "wb");
|
fp = fopen(m_indexFileName, "wb");
|
||||||
|
|
||||||
@ -1107,16 +1107,16 @@ void CEterPack::WriteIndex(CFileBase & file, TEterPackIndex * index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Free Block 이란 데이터에서 지워진 부분을 말한다.
|
* Free Block 이란 데이터에서 지워진 부분을 말한다.
|
||||||
* Free Block 들은 각각 FREE_INDEX_BLOCK_SIZE (32768) 단위로 나누어져
|
* Free Block 들은 각각 FREE_INDEX_BLOCK_SIZE (32768) 단위로 나누어져
|
||||||
* 리스트로 관리된다.
|
* 리스트로 관리된다.
|
||||||
*
|
*
|
||||||
* 예를 들어 128k 의 데이터는
|
* 예를 들어 128k 의 데이터는
|
||||||
* 128 * 1024 / FREE_INDEX_BLOCK_SIZE = 4 이므로
|
* 128 * 1024 / FREE_INDEX_BLOCK_SIZE = 4 이므로
|
||||||
* 최종 적으로는 m_FreeIndexList[4] 에 들어간다.
|
* 최종 적으로는 m_FreeIndexList[4] 에 들어간다.
|
||||||
*
|
*
|
||||||
* FREE_INDEX_BLOCK_SIZE 의 최대 값은 FREE_INDEX_MAX_SIZE(512) 이다.
|
* FREE_INDEX_BLOCK_SIZE 의 최대 값은 FREE_INDEX_MAX_SIZE(512) 이다.
|
||||||
* 따라서 16MB 이상의 데이터는 무조건 배열의 512 위치에 들어간다.
|
* 따라서 16MB 이상의 데이터는 무조건 배열의 512 위치에 들어간다.
|
||||||
*/
|
*/
|
||||||
int CEterPack::GetFreeBlockIndex(long size)
|
int CEterPack::GetFreeBlockIndex(long size)
|
||||||
{
|
{
|
||||||
@ -1153,7 +1153,7 @@ TEterPackIndex* CEterPack::NewIndex(CFileBase& file, const char* filename, long
|
|||||||
{
|
{
|
||||||
TEterPackIndex* index = NULL;
|
TEterPackIndex* index = NULL;
|
||||||
int block_size = size + (DATA_BLOCK_SIZE - (size % DATA_BLOCK_SIZE));
|
int block_size = size + (DATA_BLOCK_SIZE - (size % DATA_BLOCK_SIZE));
|
||||||
// if ((index = FindIndex(filename))) // 이미 인덱스가 존재하는지 확인
|
// if ((index = FindIndex(filename))) // 이미 인덱스가 존재하는지 확인
|
||||||
// return index;
|
// return index;
|
||||||
|
|
||||||
int blockidx = GetFreeBlockIndex(block_size);
|
int blockidx = GetFreeBlockIndex(block_size);
|
||||||
@ -1323,7 +1323,7 @@ const char * CEterPack::GetDBName()
|
|||||||
|
|
||||||
void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, unsigned int keySize)
|
void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, unsigned int keySize)
|
||||||
{
|
{
|
||||||
// 키 암호화
|
// 키 암호화
|
||||||
if (keySize != 32)
|
if (keySize != 32)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1365,7 +1365,7 @@ void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, un
|
|||||||
) // HashFilter
|
) // HashFilter
|
||||||
); // StringSource
|
); // StringSource
|
||||||
|
|
||||||
// 만들어진 키의 첫번째 4바이트로 다음 16바이트 키 생성 알고리즘 선택
|
// 만들어진 키의 첫번째 4바이트로 다음 16바이트 키 생성 알고리즘 선택
|
||||||
unsigned int idx2 = *(unsigned int*) key;
|
unsigned int idx2 = *(unsigned int*) key;
|
||||||
|
|
||||||
switch (idx2 & 3)
|
switch (idx2 & 3)
|
||||||
@ -1394,14 +1394,14 @@ void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, un
|
|||||||
//) // HexEncoder
|
//) // HexEncoder
|
||||||
) // HashFilter
|
) // HashFilter
|
||||||
); // StringSource
|
); // StringSource
|
||||||
// 키 생성 완료
|
// 키 생성 완료
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CEterPack::__Encrypt_Panama(const char* filename, const BYTE* data, SIZE_T dataSize, CLZObject& zObj)
|
bool CEterPack::__Encrypt_Panama(const char* filename, const BYTE* data, SIZE_T dataSize, CLZObject& zObj)
|
||||||
{
|
{
|
||||||
if (32 != m_stIV_Panama.length())
|
if (32 != m_stIV_Panama.length())
|
||||||
{
|
{
|
||||||
// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
|
// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
TraceError("IV not set (filename: %s)", filename);
|
TraceError("IV not set (filename: %s)", filename);
|
||||||
#endif
|
#endif
|
||||||
@ -1423,7 +1423,7 @@ bool CEterPack::__Encrypt_Panama(const char* filename, const BYTE* data, SIZE_T
|
|||||||
__CreateFileNameKey_Panama(filename, key, sizeof(key));
|
__CreateFileNameKey_Panama(filename, key, sizeof(key));
|
||||||
Encryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32);
|
Encryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32);
|
||||||
|
|
||||||
// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
|
// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
|
||||||
DWORD cryptSize = dataSize - (dataSize % Encryptor.MandatoryBlockSize());
|
DWORD cryptSize = dataSize - (dataSize % Encryptor.MandatoryBlockSize());
|
||||||
cryptSize = cryptSize > 2048 ? 2048 : cryptSize;
|
cryptSize = cryptSize > 2048 ? 2048 : cryptSize;
|
||||||
|
|
||||||
@ -1458,7 +1458,7 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T
|
|||||||
{
|
{
|
||||||
if (32 != m_stIV_Panama.length())
|
if (32 != m_stIV_Panama.length())
|
||||||
{
|
{
|
||||||
// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
|
// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
TraceError("IV not set (filename: %s)", filename);
|
TraceError("IV not set (filename: %s)", filename);
|
||||||
#endif
|
#endif
|
||||||
@ -1472,7 +1472,7 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T
|
|||||||
__CreateFileNameKey_Panama(filename, key, sizeof(key));
|
__CreateFileNameKey_Panama(filename, key, sizeof(key));
|
||||||
Decryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32);
|
Decryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32);
|
||||||
|
|
||||||
// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
|
// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
|
||||||
DWORD cryptSize = dataSize - (dataSize % Decryptor.MandatoryBlockSize());
|
DWORD cryptSize = dataSize - (dataSize % Decryptor.MandatoryBlockSize());
|
||||||
cryptSize = cryptSize > 2048 ? 2048 : cryptSize;
|
cryptSize = cryptSize > 2048 ? 2048 : cryptSize;
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ void CEterPackManager::SetRelativePathMode()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// StringPath std::string 버전
|
// StringPath std::string 버전
|
||||||
int CEterPackManager::ConvertFileName(const char * c_szFileName, std::string & rstrFileName)
|
int CEterPackManager::ConvertFileName(const char * c_szFileName, std::string & rstrFileName)
|
||||||
{
|
{
|
||||||
rstrFileName = c_szFileName;
|
rstrFileName = c_szFileName;
|
||||||
@ -226,7 +226,7 @@ bool CEterPackManager::GetFromPack(CMappedFile & rMappedFile, const char * c_szF
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const time_t g_tCachingInterval = 10; // 10초
|
const time_t g_tCachingInterval = 10; // 10초
|
||||||
void CEterPackManager::ArrangeMemoryMappedPack()
|
void CEterPackManager::ArrangeMemoryMappedPack()
|
||||||
{
|
{
|
||||||
//time_t curTime = time(NULL);
|
//time_t curTime = time(NULL);
|
||||||
@ -250,8 +250,8 @@ bool CEterPackManager::GetFromFile(CMappedFile & rMappedFile, const char * c_szF
|
|||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
//const char *pcExt = strchr(c_szFileName, '.');
|
//const char *pcExt = strchr(c_szFileName, '.');
|
||||||
//if (pcExt &&
|
//if (pcExt &&
|
||||||
// _strnicmp(pcExt, ".py", 3) == 0 && // python 스크립트 중
|
// _strnicmp(pcExt, ".py", 3) == 0 && // python 스크립트 중
|
||||||
// stricmp(c_szFileName, "logininfo.py") != 0 && // 로그인 정보 파일이 아니고
|
// stricmp(c_szFileName, "logininfo.py") != 0 && // 로그인 정보 파일이 아니고
|
||||||
// strnicmp(c_szFileName, "locale", 6) != 0
|
// strnicmp(c_szFileName, "locale", 6) != 0
|
||||||
// )
|
// )
|
||||||
//{
|
//{
|
||||||
@ -289,7 +289,7 @@ bool CEterPackManager::isExistInPack(const char * c_szFileName)
|
|||||||
return pkFileItem->pkPack->IsExist(strFileName.c_str());
|
return pkFileItem->pkPack->IsExist(strFileName.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE : 매치 되는 팩이 없다면 false - [levites]
|
// NOTE : 매치 되는 팩이 없다면 false - [levites]
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -447,7 +447,7 @@ void CEterPackManager::RetrieveHybridCryptPackKeys(const BYTE *pStream)
|
|||||||
{
|
{
|
||||||
int iRecvedCryptKeySize = 0;
|
int iRecvedCryptKeySize = 0;
|
||||||
memcpy( &iRecvedCryptKeySize, pStream + iMemOffset, sizeof(iRecvedCryptKeySize) );
|
memcpy( &iRecvedCryptKeySize, pStream + iMemOffset, sizeof(iRecvedCryptKeySize) );
|
||||||
iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // 서버에서 받은 key stream에는 filename hash가 포함되어 있으므로, hash 사이즈 만큼 배줌.
|
iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // 서버에서 받은 key stream에는 filename hash가 포함되어 있으므로, hash 사이즈 만큼 배줌.
|
||||||
iMemOffset += sizeof(iRecvedCryptKeySize);
|
iMemOffset += sizeof(iRecvedCryptKeySize);
|
||||||
|
|
||||||
memcpy( &dwPackageNameHash, pStream + iMemOffset, sizeof(dwPackageNameHash) );
|
memcpy( &dwPackageNameHash, pStream + iMemOffset, sizeof(dwPackageNameHash) );
|
||||||
|
@ -287,7 +287,7 @@ PyObject* grpGetSplitingTextLineCount(PyObject* poSelf, PyObject* poArgs)
|
|||||||
{
|
{
|
||||||
i += 1;
|
i += 1;
|
||||||
|
|
||||||
// 자동 줄 바꿈되고 바로 | 가 있을 경우
|
// 자동 줄 바꿈되고 바로 | 가 있을 경우
|
||||||
if (iPosition>0)
|
if (iPosition>0)
|
||||||
++iLineCount;
|
++iLineCount;
|
||||||
|
|
||||||
@ -337,15 +337,15 @@ PyObject* grpGetSplitingTextLine(PyObject* poSelf, PyObject* poArgs)
|
|||||||
int iPosition = 0;
|
int iPosition = 0;
|
||||||
int iLineCount = 0;
|
int iLineCount = 0;
|
||||||
|
|
||||||
// 1차 : 조금 더 깔끔하게 안될까 -_-a
|
// 1차 : 조금 더 깔끔하게 안될까 -_-a
|
||||||
// 2차 : 오.. 좀 나아졌다 +_+
|
// 2차 : 오.. 좀 나아졌다 +_+
|
||||||
for (DWORD i = 0; i < strlen(szText);)
|
for (DWORD i = 0; i < strlen(szText);)
|
||||||
{
|
{
|
||||||
if ('|' == szText[i])
|
if ('|' == szText[i])
|
||||||
{
|
{
|
||||||
i += 1;
|
i += 1;
|
||||||
|
|
||||||
// 자동 줄 바꿈되고 바로 | 가 있을 경우
|
// 자동 줄 바꿈되고 바로 | 가 있을 경우
|
||||||
if (iPosition>0)
|
if (iPosition>0)
|
||||||
++iLineCount;
|
++iLineCount;
|
||||||
iPosition = 0;
|
iPosition = 0;
|
||||||
|
@ -18,10 +18,10 @@ void CGridSlotWindow::OnRenderPickingSlot()
|
|||||||
DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
|
DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
|
||||||
DWORD dwItemIndex = UI::CWindowManager::Instance().GetAttachingIndex();
|
DWORD dwItemIndex = UI::CWindowManager::Instance().GetAttachingIndex();
|
||||||
|
|
||||||
// UseMode 이고..
|
// UseMode 이고..
|
||||||
if (m_isUseMode)
|
if (m_isUseMode)
|
||||||
{
|
{
|
||||||
// Pick 된 아이템이 있으면..
|
// Pick 된 아이템이 있으면..
|
||||||
TSlot * pSlot = *SlotList.begin();
|
TSlot * pSlot = *SlotList.begin();
|
||||||
TSlot * pCenterSlot;
|
TSlot * pCenterSlot;
|
||||||
if (GetSlotPointer(pSlot->dwCenterSlotNumber, &pCenterSlot))
|
if (GetSlotPointer(pSlot->dwCenterSlotNumber, &pCenterSlot))
|
||||||
@ -40,7 +40,7 @@ void CGridSlotWindow::OnRenderPickingSlot()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 아니면 그냥 옮기기
|
// 아니면 그냥 옮기기
|
||||||
if (CheckMoving(dwSlotNumber, dwItemIndex, SlotList))
|
if (CheckMoving(dwSlotNumber, dwItemIndex, SlotList))
|
||||||
CPythonGraphic::Instance().SetDiffuseColor(1.0f, 1.0f, 1.0f, 0.5f);
|
CPythonGraphic::Instance().SetDiffuseColor(1.0f, 1.0f, 1.0f, 0.5f);
|
||||||
else
|
else
|
||||||
@ -85,8 +85,8 @@ BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
|
|||||||
{
|
{
|
||||||
TSlot * pSlot = *itor;
|
TSlot * pSlot = *itor;
|
||||||
|
|
||||||
// NOTE : 한 슬롯 이상 사이즈의 아이템의 경우 가장 왼쪽 위의 슬롯 포인터를 리턴한다.
|
// NOTE : 한 슬롯 이상 사이즈의 아이템의 경우 가장 왼쪽 위의 슬롯 포인터를 리턴한다.
|
||||||
// 명시적이지 못한 코드.. 더 좋은 방법은 없는가? - [levites]
|
// 명시적이지 못한 코드.. 더 좋은 방법은 없는가? - [levites]
|
||||||
if (!pMinSlot)
|
if (!pMinSlot)
|
||||||
{
|
{
|
||||||
pMinSlot = pSlot;
|
pMinSlot = pSlot;
|
||||||
@ -119,7 +119,7 @@ BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
|
|||||||
|
|
||||||
*ppSlot = pCenterSlot;
|
*ppSlot = pCenterSlot;
|
||||||
|
|
||||||
// 현재 아이템을 들고 있는 중이고..
|
// 현재 아이템을 들고 있는 중이고..
|
||||||
if (UI::CWindowManager::Instance().IsAttaching())
|
if (UI::CWindowManager::Instance().IsAttaching())
|
||||||
{
|
{
|
||||||
DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
|
DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
|
||||||
@ -159,7 +159,7 @@ BOOL CGridSlotWindow::GetPickedSlotList(int iWidth, int iHeight, std::list<TSlot
|
|||||||
int ixStart = int(ix) - int(ixHalfStep - (ixHalfStep % 2));
|
int ixStart = int(ix) - int(ixHalfStep - (ixHalfStep % 2));
|
||||||
int ixEnd = int(ix) + int(ixHalfStep);
|
int ixEnd = int(ix) + int(ixHalfStep);
|
||||||
|
|
||||||
// FIXME : 제대로 된 계산 공식을 찾자 - [levites]
|
// FIXME : 제대로 된 계산 공식을 찾자 - [levites]
|
||||||
int iyStart = 0, iyEnd = 0;
|
int iyStart = 0, iyEnd = 0;
|
||||||
|
|
||||||
if (1 == iHeight)
|
if (1 == iHeight)
|
||||||
@ -214,7 +214,7 @@ BOOL CGridSlotWindow::GetPickedSlotList(int iWidth, int iHeight, std::list<TSlot
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Refine Scroll 등을 위한 예외 처리
|
// Refine Scroll 등을 위한 예외 처리
|
||||||
if (m_isUseMode && 1 == pSlotPointerList->size())
|
if (m_isUseMode && 1 == pSlotPointerList->size())
|
||||||
{
|
{
|
||||||
TSlot * pMainSlot = *pSlotPointerList->begin();
|
TSlot * pMainSlot = *pSlotPointerList->begin();
|
||||||
@ -349,11 +349,11 @@ BOOL CGridSlotWindow::CheckMoving(DWORD dwSlotNumber, DWORD dwItemIndex, const s
|
|||||||
{
|
{
|
||||||
TSlot * pSlot = *itor;
|
TSlot * pSlot = *itor;
|
||||||
|
|
||||||
if (dwSlotNumber != pSlot->dwCenterSlotNumber) // 들었던 자리가 아닐 경우에
|
if (dwSlotNumber != pSlot->dwCenterSlotNumber) // 들었던 자리가 아닐 경우에
|
||||||
{
|
{
|
||||||
if (0 != pSlot->dwItemIndex || pSlot->dwCenterSlotNumber != pSlot->dwSlotNumber) // 아이템이 있고
|
if (0 != pSlot->dwItemIndex || pSlot->dwCenterSlotNumber != pSlot->dwSlotNumber) // 아이템이 있고
|
||||||
{
|
{
|
||||||
if (dwItemIndex != pSlot->dwItemIndex) // 다른 아이템이면 못 옮김
|
if (dwItemIndex != pSlot->dwItemIndex) // 다른 아이템이면 못 옮김
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,7 +252,7 @@ void CSlotWindow::SetCoverButton(DWORD dwIndex, const char * c_szUpImageName, co
|
|||||||
rpCoverButton->Enable();
|
rpCoverButton->Enable();
|
||||||
rpCoverButton->Show();
|
rpCoverButton->Show();
|
||||||
|
|
||||||
// NOTE : Cover 버튼이 Plus 버튼을 가려버려서 임시 코드를..
|
// NOTE : Cover 버튼이 Plus 버튼을 가려버려서 임시 코드를..
|
||||||
if (pSlot->pSlotButton)
|
if (pSlot->pSlotButton)
|
||||||
{
|
{
|
||||||
SetTop(pSlot->pSlotButton);
|
SetTop(pSlot->pSlotButton);
|
||||||
@ -585,7 +585,7 @@ void CSlotWindow::RefreshSlot()
|
|||||||
{
|
{
|
||||||
OnRefreshSlot();
|
OnRefreshSlot();
|
||||||
|
|
||||||
// NOTE : Refresh 될때 ToolTip 도 갱신 합니다 - [levites]
|
// NOTE : Refresh 될때 ToolTip 도 갱신 합니다 - [levites]
|
||||||
if (IsRendering())
|
if (IsRendering())
|
||||||
{
|
{
|
||||||
TSlot * pSlot;
|
TSlot * pSlot;
|
||||||
@ -862,8 +862,8 @@ void CSlotWindow::OnMouseOverOut()
|
|||||||
|
|
||||||
void CSlotWindow::OnMouseOver()
|
void CSlotWindow::OnMouseOver()
|
||||||
{
|
{
|
||||||
// FIXME : 윈도우를 드래깅 하는 도중에 SetTop이 되어버리면 Capture가 풀어져 버린다. 그것의 방지 코드.
|
// FIXME : 윈도우를 드래깅 하는 도중에 SetTop이 되어버리면 Capture가 풀어져 버린다. 그것의 방지 코드.
|
||||||
// 좀 더 근본적인 해결책을 찾아야 할 듯 - [levites]
|
// 좀 더 근본적인 해결책을 찾아야 할 듯 - [levites]
|
||||||
// if (UI::CWindowManager::Instance().IsCapture())
|
// if (UI::CWindowManager::Instance().IsCapture())
|
||||||
// if (!UI::CWindowManager::Instance().IsAttaching())
|
// if (!UI::CWindowManager::Instance().IsAttaching())
|
||||||
// return;
|
// return;
|
||||||
@ -991,7 +991,7 @@ void CSlotWindow::OnRender()
|
|||||||
TSlotListIterator itor;
|
TSlotListIterator itor;
|
||||||
|
|
||||||
//
|
//
|
||||||
// 모든 슬롯 상자 그리기
|
// 모든 슬롯 상자 그리기
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
#ifdef __RENDER_SLOT_AREA__
|
#ifdef __RENDER_SLOT_AREA__
|
||||||
CPythonGraphic::Instance().SetDiffuseColor(0.5f, 0.5f, 0.5f);
|
CPythonGraphic::Instance().SetDiffuseColor(0.5f, 0.5f, 0.5f);
|
||||||
@ -1056,7 +1056,7 @@ void CSlotWindow::OnRender()
|
|||||||
|
|
||||||
if (fcurTime - rSlot.fStartCoolTime >= rSlot.fCoolTime)
|
if (fcurTime - rSlot.fStartCoolTime >= rSlot.fCoolTime)
|
||||||
{
|
{
|
||||||
// 쿨타임이 끝난지 1초 이내라면..
|
// 쿨타임이 끝난지 1초 이내라면..
|
||||||
if ((fcurTime - rSlot.fStartCoolTime) - rSlot.fCoolTime < 1.0f)
|
if ((fcurTime - rSlot.fStartCoolTime) - rSlot.fCoolTime < 1.0f)
|
||||||
__CreateFinishCoolTimeEffect(&rSlot);
|
__CreateFinishCoolTimeEffect(&rSlot);
|
||||||
|
|
||||||
@ -1218,8 +1218,8 @@ BOOL CSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
|
|||||||
int ixLocal = lx - m_rect.left;
|
int ixLocal = lx - m_rect.left;
|
||||||
int iyLocal = ly - m_rect.top;
|
int iyLocal = ly - m_rect.top;
|
||||||
|
|
||||||
// NOTE : 왼쪽 맨위 상단 한곳이 기준 이라는 점을 이용해 왼쪽 위에서부터 오른쪽 아래로
|
// NOTE : 왼쪽 맨위 상단 한곳이 기준 이라는 점을 이용해 왼쪽 위에서부터 오른쪽 아래로
|
||||||
// 차례로 검색해 감으로써 덮혀 있는 Slot은 자동 무시 된다는 특성을 이용한다. - [levites]
|
// 차례로 검색해 감으로써 덮혀 있는 Slot은 자동 무시 된다는 특성을 이용한다. - [levites]
|
||||||
for (TSlotListIterator itor = m_SlotList.begin(); itor != m_SlotList.end(); ++itor)
|
for (TSlotListIterator itor = m_SlotList.begin(); itor != m_SlotList.end(); ++itor)
|
||||||
{
|
{
|
||||||
TSlot & rSlot = *itor;
|
TSlot & rSlot = *itor;
|
||||||
@ -1227,7 +1227,7 @@ BOOL CSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
|
|||||||
int ixCellSize = rSlot.ixCellSize;
|
int ixCellSize = rSlot.ixCellSize;
|
||||||
int iyCellSize = rSlot.iyCellSize;
|
int iyCellSize = rSlot.iyCellSize;
|
||||||
|
|
||||||
// NOTE : Item이 Hide 되어있을 경우를 위한..
|
// NOTE : Item이 Hide 되어있을 경우를 위한..
|
||||||
if (rSlot.isItem)
|
if (rSlot.isItem)
|
||||||
{
|
{
|
||||||
ixCellSize = max(rSlot.ixCellSize, int(rSlot.byxPlacedItemSize * ITEM_WIDTH));
|
ixCellSize = max(rSlot.ixCellSize, int(rSlot.byxPlacedItemSize * ITEM_WIDTH));
|
||||||
|
@ -66,10 +66,10 @@ namespace UI
|
|||||||
|
|
||||||
void CWindow::Clear()
|
void CWindow::Clear()
|
||||||
{
|
{
|
||||||
// FIXME : Children을 즉시 Delete하지는 않는다.
|
// FIXME : Children을 즉시 Delete하지는 않는다.
|
||||||
// 어차피 Python쪽에서 Destroy가 하나씩 다시 호출 될 것이므로..
|
// 어차피 Python쪽에서 Destroy가 하나씩 다시 호출 될 것이므로..
|
||||||
// 하지만 만약을 위해 링크는 끊어 놓는다.
|
// 하지만 만약을 위해 링크는 끊어 놓는다.
|
||||||
// 더 좋은 형태는 있는가? - [levites]
|
// 더 좋은 형태는 있는가? - [levites]
|
||||||
std::for_each(m_pChildList.begin(), m_pChildList.end(), FClear());
|
std::for_each(m_pChildList.begin(), m_pChildList.end(), FClear());
|
||||||
m_pChildList.clear();
|
m_pChildList.clear();
|
||||||
|
|
||||||
@ -93,8 +93,8 @@ namespace UI
|
|||||||
m_bShow = false;
|
m_bShow = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE : IsShow는 "\xC0\xDA\xBD\xC5\xC0\xCC \xBA\xB8\xC0\xCC\xB4\xC2\xB0\xA1?" 이지만, __IsShowing은 "\xC0\xDA\xBD\xC5\xC0\xCC \xB1\xD7\xB7\xC1\xC1\xF6\xB0\xED \xC0\xD6\xB4\xC2\xB0\xA1?" 를 체크한다
|
// NOTE : IsShow는 "\xC0\xDA\xBD\xC5\xC0\xCC \xBA\xB8\xC0\xCC\xB4\xC2\xB0\xA1?" 이지만, __IsShowing은 "\xC0\xDA\xBD\xC5\xC0\xCC \xB1\xD7\xB7\xC1\xC1\xF6\xB0\xED \xC0\xD6\xB4\xC2\xB0\xA1?" 를 체크한다
|
||||||
// 자신은 Show 지만 Tree 위쪽의 Parent 중 하나는 Hide 일 수 있으므로.. - [levites]
|
// 자신은 Show 지만 Tree 위쪽의 Parent 중 하나는 Hide 일 수 있으므로.. - [levites]
|
||||||
bool CWindow::IsRendering()
|
bool CWindow::IsRendering()
|
||||||
{
|
{
|
||||||
if (!IsShow())
|
if (!IsShow())
|
||||||
@ -577,7 +577,7 @@ namespace UI
|
|||||||
BOOL CWindow::OnMouseLeftButtonUp()
|
BOOL CWindow::OnMouseLeftButtonUp()
|
||||||
{
|
{
|
||||||
PyCallClassMemberFunc(m_poHandler, "OnMouseLeftButtonUp", BuildEmptyTuple());
|
PyCallClassMemberFunc(m_poHandler, "OnMouseLeftButtonUp", BuildEmptyTuple());
|
||||||
return TRUE; // NOTE : ButtonUp은 예외로 무조건 TRUE
|
return TRUE; // NOTE : ButtonUp은 예외로 무조건 TRUE
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CWindow::OnMouseLeftButtonDoubleClick()
|
BOOL CWindow::OnMouseLeftButtonDoubleClick()
|
||||||
@ -1291,7 +1291,7 @@ namespace UI
|
|||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// MarkBox - 마크 출력용 UI 윈도우
|
// MarkBox - 마크 출력용 UI 윈도우
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
CMarkBox::CMarkBox(PyObject * ppyObject) : CWindow(ppyObject)
|
CMarkBox::CMarkBox(PyObject * ppyObject) : CWindow(ppyObject)
|
||||||
{
|
{
|
||||||
|
@ -534,7 +534,7 @@ namespace UI
|
|||||||
if (m_pActiveWindow)
|
if (m_pActiveWindow)
|
||||||
m_pActiveWindow->OnKillFocus();
|
m_pActiveWindow->OnKillFocus();
|
||||||
|
|
||||||
// 이미 락된 윈도우리스트안에 있다면 제거한다..
|
// 이미 락된 윈도우리스트안에 있다면 제거한다..
|
||||||
m_LockWindowList.remove(pWin);
|
m_LockWindowList.remove(pWin);
|
||||||
|
|
||||||
if (m_pLockWindow)
|
if (m_pLockWindow)
|
||||||
@ -575,8 +575,8 @@ namespace UI
|
|||||||
|
|
||||||
if (m_pActiveWindow)
|
if (m_pActiveWindow)
|
||||||
{
|
{
|
||||||
// NOTE : 누적된 Window가 많아지면 Clear를 해줘야 할까?
|
// NOTE : 누적된 Window가 많아지면 Clear를 해줘야 할까?
|
||||||
// 일단은 중복 누적이 안되며 포커스 되는 갯수 자체가 5개 미만이니 굳이 필요하지는 않을 듯.. - [levites]
|
// 일단은 중복 누적이 안되며 포커스 되는 갯수 자체가 5개 미만이니 굳이 필요하지는 않을 듯.. - [levites]
|
||||||
m_ActiveWindowList.push_back(m_pActiveWindow);
|
m_ActiveWindowList.push_back(m_pActiveWindow);
|
||||||
m_pActiveWindow->OnKillFocus();
|
m_pActiveWindow->OnKillFocus();
|
||||||
}
|
}
|
||||||
@ -618,8 +618,8 @@ namespace UI
|
|||||||
CWindow * pParentWindow = pWin->GetParent();
|
CWindow * pParentWindow = pWin->GetParent();
|
||||||
pParentWindow->SetTop(pWin);
|
pParentWindow->SetTop(pWin);
|
||||||
|
|
||||||
// NOTE : Capture가 리셋된다..? - [levites]
|
// NOTE : Capture가 리셋된다..? - [levites]
|
||||||
// NOTE : 인벤토리에서 아이템을 드래그 해서 밖에다 놓을때 캡춰가 남아서 창의 버튼을 두번 눌러야 하는 버그를 위해 추가
|
// NOTE : 인벤토리에서 아이템을 드래그 해서 밖에다 놓을때 캡춰가 남아서 창의 버튼을 두번 눌러야 하는 버그를 위해 추가
|
||||||
// ResetCapture();
|
// ResetCapture();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -628,7 +628,7 @@ namespace UI
|
|||||||
if (m_pLockWindow)
|
if (m_pLockWindow)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// GameLayer에 속해 있는 윈도우가 피킹 됐다면 무조건 SetTop을 해준다.
|
// GameLayer에 속해 있는 윈도우가 피킹 됐다면 무조건 SetTop을 해준다.
|
||||||
TLayerContainer::iterator itor = m_LayerWindowMap.find("UI");
|
TLayerContainer::iterator itor = m_LayerWindowMap.find("UI");
|
||||||
if (itor == m_LayerWindowMap.end())
|
if (itor == m_LayerWindowMap.end())
|
||||||
return;
|
return;
|
||||||
@ -896,7 +896,7 @@ namespace UI
|
|||||||
{
|
{
|
||||||
if (m_pLeftCaptureWindow->OnMouseLeftButtonUp())
|
if (m_pLeftCaptureWindow->OnMouseLeftButtonUp())
|
||||||
{
|
{
|
||||||
// NOTE : 여기서 m_pLeftCaptureWindow가 NULL 일 수 있습니다!! - [levites]
|
// NOTE : 여기서 m_pLeftCaptureWindow가 NULL 일 수 있습니다!! - [levites]
|
||||||
m_pLeftCaptureWindow = NULL;
|
m_pLeftCaptureWindow = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1099,7 +1099,7 @@ namespace UI
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE : 전체로 돌리지 않고 Activate되어있는 EditLine에만 보내는 이벤트
|
// NOTE : 전체로 돌리지 않고 Activate되어있는 EditLine에만 보내는 이벤트
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindowManager::RunChangeCodePage()
|
void CWindowManager::RunChangeCodePage()
|
||||||
|
@ -1883,13 +1883,13 @@ PyObject * wndMarkBox_SetImageFilename(PyObject * poSelf, PyObject * poArgs)
|
|||||||
|
|
||||||
PyObject * wndMarkBox_SetImage(PyObject * poSelf, PyObject * poArgs)
|
PyObject * wndMarkBox_SetImage(PyObject * poSelf, PyObject * poArgs)
|
||||||
{
|
{
|
||||||
// 아무것도 하지 않음
|
// 아무것도 하지 않음
|
||||||
return Py_BuildNone();
|
return Py_BuildNone();
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject * wndMarkBox_Load(PyObject * poSelf, PyObject * poArgs)
|
PyObject * wndMarkBox_Load(PyObject * poSelf, PyObject * poArgs)
|
||||||
{
|
{
|
||||||
// 아무것도 하지 않음
|
// 아무것도 하지 않음
|
||||||
return Py_BuildNone();
|
return Py_BuildNone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2495,7 +2495,7 @@ void initwndMgr()
|
|||||||
|
|
||||||
PyObject * poModule = Py_InitModule("wndMgr", s_methods);
|
PyObject * poModule = Py_InitModule("wndMgr", s_methods);
|
||||||
|
|
||||||
// 하나의 딕셔너리에 너무 많은 Function이 포함 되는 것 같아 이런식으로 딕셔너리를 나누는 것을 고려 중 - [levites]
|
// 하나의 딕셔너리에 너무 많은 Function이 포함 되는 것 같아 이런식으로 딕셔너리를 나누는 것을 고려 중 - [levites]
|
||||||
// PyObject * poMgrModule = Py_InitModule("wndMgr", s_methods);
|
// PyObject * poMgrModule = Py_InitModule("wndMgr", s_methods);
|
||||||
// PyObject * poTextModule = Py_InitModule("wndText", s_methods);
|
// PyObject * poTextModule = Py_InitModule("wndText", s_methods);
|
||||||
// PyObject * poSlotModule = Py_InitModule("wndSlot", s_methods);
|
// PyObject * poSlotModule = Py_InitModule("wndSlot", s_methods);
|
||||||
|
@ -112,7 +112,7 @@ void CActorInstance::OnUpdate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 2004.07.05.myevan. 궁신탄영 맵에 끼이는 문제해결
|
// 2004.07.05.myevan. 궁신탄영 맵에 끼이는 문제해결
|
||||||
IBackground& CActorInstance::GetBackground()
|
IBackground& CActorInstance::GetBackground()
|
||||||
{
|
{
|
||||||
return IBackground::Instance();
|
return IBackground::Instance();
|
||||||
@ -202,7 +202,7 @@ void CActorInstance::SetFishingPosition(D3DXVECTOR3 & rv3Position)
|
|||||||
m_v3FishingPosition = rv3Position;
|
m_v3FishingPosition = rv3Position;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ActorInstanceMotion.cpp 에 넣도록 하자
|
// ActorInstanceMotion.cpp 에 넣도록 하자
|
||||||
void CActorInstance::Move()
|
void CActorInstance::Move()
|
||||||
{
|
{
|
||||||
if (m_isWalking)
|
if (m_isWalking)
|
||||||
@ -459,8 +459,8 @@ void CActorInstance::PhysicsProcess()
|
|||||||
|
|
||||||
void CActorInstance::__AccumulationMovement(float fRot)
|
void CActorInstance::__AccumulationMovement(float fRot)
|
||||||
{
|
{
|
||||||
// NOTE - 일단은 WAIT로 미끄러짐 방지
|
// NOTE - 일단은 WAIT로 미끄러짐 방지
|
||||||
// 추후에는 RaceMotionData가 이동되는 모션인지에 대한 Flag를 갖고 있게끔 한다. - [levites]
|
// 추후에는 RaceMotionData가 이동되는 모션인지에 대한 Flag를 갖고 있게끔 한다. - [levites]
|
||||||
if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex())
|
if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -606,9 +606,9 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE : 기존의 Sphere Overlap됬을경우 처리가 비비기를 하면은 Penetration될 위험이 많아서 ( 실제로도 나왔고 --)
|
// NOTE : 기존의 Sphere Overlap됬을경우 처리가 비비기를 하면은 Penetration될 위험이 많아서 ( 실제로도 나왔고 --)
|
||||||
// Sphere간 Collision이 생겼을 경우 이전위치로 RollBack하는 방식으로 바꿨다.
|
// Sphere간 Collision이 생겼을 경우 이전위치로 RollBack하는 방식으로 바꿨다.
|
||||||
// 단 BGObject에 대해서만.
|
// 단 BGObject에 대해서만.
|
||||||
|
|
||||||
if (isAttacking() )
|
if (isAttacking() )
|
||||||
return;
|
return;
|
||||||
@ -618,7 +618,7 @@ void CActorInstance::AdjustDynamicCollisionMovement(const CActorInstance * c_pAc
|
|||||||
{
|
{
|
||||||
BlockMovement();
|
BlockMovement();
|
||||||
|
|
||||||
//Movement초기화
|
//Movement초기화
|
||||||
/* m_v3Movement = D3DXVECTOR3(0.f,0.f,0.f);
|
/* m_v3Movement = D3DXVECTOR3(0.f,0.f,0.f);
|
||||||
|
|
||||||
TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin();
|
TCollisionPointInstanceListIterator itMain = m_BodyPointInstanceList.begin();
|
||||||
@ -682,7 +682,7 @@ void CActorInstance::__AdjustCollisionMovement(const CGraphicObjectInstance * c_
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Body는 하나임을 가정합니다.
|
// Body는 하나임을 가정합니다.
|
||||||
|
|
||||||
if (m_v3Movement.x == 0.0f && m_v3Movement.y == 0.0f && m_v3Movement.z == 0.0f)
|
if (m_v3Movement.x == 0.0f && m_v3Movement.y == 0.0f && m_v3Movement.z == 0.0f)
|
||||||
return;
|
return;
|
||||||
|
@ -159,7 +159,7 @@ void CActorInstance::AttachWeapon(DWORD dwItemIndex,DWORD dwParentPartIndex, DWO
|
|||||||
}
|
}
|
||||||
|
|
||||||
__DestroyWeaponTrace();
|
__DestroyWeaponTrace();
|
||||||
//양손무기(자객 이도류) 왼손,오른손 모두에 장착.
|
//양손무기(자객 이도류) 왼손,오른손 모두에 장착.
|
||||||
if (__IsRightHandWeapon(pItemData->GetWeaponType()))
|
if (__IsRightHandWeapon(pItemData->GetWeaponType()))
|
||||||
AttachWeapon(dwParentPartIndex, CRaceData::PART_WEAPON, pItemData);
|
AttachWeapon(dwParentPartIndex, CRaceData::PART_WEAPON, pItemData);
|
||||||
if (__IsLeftHandWeapon(pItemData->GetWeaponType()))
|
if (__IsLeftHandWeapon(pItemData->GetWeaponType()))
|
||||||
@ -182,7 +182,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI
|
|||||||
if (!GetAttachingBoneName(dwPartIndex, &szBoneName))
|
if (!GetAttachingBoneName(dwPartIndex, &szBoneName))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// NOTE : (이도류처리)단도일 경우 형태가 다른 것으로 얻는다. 없을 경우 디폴트를 리턴
|
// NOTE : (이도류처리)단도일 경우 형태가 다른 것으로 얻는다. 없을 경우 디폴트를 리턴
|
||||||
if (CRaceData::PART_WEAPON_LEFT == dwPartIndex)
|
if (CRaceData::PART_WEAPON_LEFT == dwPartIndex)
|
||||||
{
|
{
|
||||||
RegisterModelThing(dwPartIndex, pItemData->GetSubModelThing());
|
RegisterModelThing(dwPartIndex, pItemData->GetSubModelThing());
|
||||||
@ -205,7 +205,7 @@ void CActorInstance::AttachWeapon(DWORD dwParentPartIndex, DWORD dwPartIndex, CI
|
|||||||
SetModelInstance(dwPartIndex, dwPartIndex, 0);
|
SetModelInstance(dwPartIndex, dwPartIndex, 0);
|
||||||
AttachModelInstance(dwParentPartIndex, szBoneName, dwPartIndex);
|
AttachModelInstance(dwParentPartIndex, szBoneName, dwPartIndex);
|
||||||
|
|
||||||
// 20041208.myevan.무기스펙큘러(값옷은 SetShape에서 직접 해준다.)
|
// 20041208.myevan.무기스펙큘러(값옷은 SetShape에서 직접 해준다.)
|
||||||
if (USE_WEAPON_SPECULAR)
|
if (USE_WEAPON_SPECULAR)
|
||||||
{
|
{
|
||||||
SMaterialData kMaterialData;
|
SMaterialData kMaterialData;
|
||||||
@ -424,8 +424,8 @@ void CActorInstance::RefreshActorInstance()
|
|||||||
{
|
{
|
||||||
const NRaceData::TCollisionData * c_pCollisionData = c_pAttachingData->pCollisionData;
|
const NRaceData::TCollisionData * c_pCollisionData = c_pAttachingData->pCollisionData;
|
||||||
|
|
||||||
// FIXME : 첫번째 인자는 Part의 번호다.
|
// FIXME : 첫번째 인자는 Part의 번호다.
|
||||||
// Base는 무조건 0인가? - [levites]
|
// Base는 무조건 0인가? - [levites]
|
||||||
TCollisionPointInstance PointInstance;
|
TCollisionPointInstance PointInstance;
|
||||||
if (NRaceData::COLLISION_TYPE_ATTACKING == c_pCollisionData->iCollisionType)
|
if (NRaceData::COLLISION_TYPE_ATTACKING == c_pCollisionData->iCollisionType)
|
||||||
continue;
|
continue;
|
||||||
|
@ -170,10 +170,10 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
|
|||||||
}
|
}
|
||||||
else if (m_pkCurRaceMotionData->IsComboInputTimeData())
|
else if (m_pkCurRaceMotionData->IsComboInputTimeData())
|
||||||
{
|
{
|
||||||
// 동작 경과 시간
|
// 동작 경과 시간
|
||||||
float fElapsedTime = GetAttackingElapsedTime();
|
float fElapsedTime = GetAttackingElapsedTime();
|
||||||
|
|
||||||
// 이미 입력 한계 시간이 지났다면..
|
// 이미 입력 한계 시간이 지났다면..
|
||||||
if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime())
|
if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime())
|
||||||
{
|
{
|
||||||
//Tracen("\xC0\xD4\xB7\xC2 \xC7\xD1\xB0\xE8 \xBD\xC3\xB0\xA3 \xC1\xF6\xB3\xB2");
|
//Tracen("\xC0\xD4\xB7\xC2 \xC7\xD1\xB0\xE8 \xBD\xC3\xB0\xA3 \xC1\xF6\xB3\xB2");
|
||||||
@ -182,14 +182,14 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면
|
if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면
|
||||||
{
|
{
|
||||||
//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
|
//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
|
||||||
// args : BlendingTime
|
// args : BlendingTime
|
||||||
__RunNextCombo();
|
__RunNextCombo();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면..
|
else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면..
|
||||||
{
|
{
|
||||||
//Tracen("\xBC\xB1 \xC0\xD4\xB7\xC2 \xBC\xB3\xC1\xA4");
|
//Tracen("\xBC\xB1 \xC0\xD4\xB7\xC2 \xBC\xB3\xC1\xA4");
|
||||||
m_isPreInput = TRUE;
|
m_isPreInput = TRUE;
|
||||||
@ -199,7 +199,7 @@ bool CActorInstance::InputComboAttackCommand(float fDirRot)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
float fElapsedTime = GetAttackingElapsedTime();
|
float fElapsedTime = GetAttackingElapsedTime();
|
||||||
if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면
|
if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면
|
||||||
{
|
{
|
||||||
//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
|
//Tracen("\xB4\xD9\xC0\xBD \xC4\xDE\xBA\xB8 \xB5\xBF\xC0\xDB");
|
||||||
// args : BlendingTime
|
// args : BlendingTime
|
||||||
@ -243,8 +243,8 @@ void CActorInstance::ComboProcess()
|
|||||||
{
|
{
|
||||||
m_isPreInput = FALSE;
|
m_isPreInput = FALSE;
|
||||||
|
|
||||||
if (!IsUsingSkill()) // m_isNextPreInput는 활모드 일때만 사용하는 변수
|
if (!IsUsingSkill()) // m_isNextPreInput는 활모드 일때만 사용하는 변수
|
||||||
if (m_isNextPreInput) // 활일때만 스킬이 캔슬 되는건 이곳 때문임
|
if (m_isNextPreInput) // 활일때만 스킬이 캔슬 되는건 이곳 때문임
|
||||||
{
|
{
|
||||||
__RunNextCombo();
|
__RunNextCombo();
|
||||||
m_isNextPreInput = FALSE;
|
m_isNextPreInput = FALSE;
|
||||||
@ -288,7 +288,7 @@ void CActorInstance::__RunNextCombo()
|
|||||||
ComboAttack(wcurComboMotionIndex, m_fAtkDirRot, 0.1f);
|
ComboAttack(wcurComboMotionIndex, m_fAtkDirRot, 0.1f);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
// 콤보가 끝났다면
|
// 콤보가 끝났다면
|
||||||
if (m_dwcurComboIndex == pComboData->ComboIndexVector.size())
|
if (m_dwcurComboIndex == pComboData->ComboIndexVector.size())
|
||||||
{
|
{
|
||||||
__OnEndCombo();
|
__OnEndCombo();
|
||||||
@ -302,8 +302,8 @@ void CActorInstance::__OnEndCombo()
|
|||||||
m_dwcurComboIndex = 1;
|
m_dwcurComboIndex = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 여기서 콤보를 초기화 해선 안된다.
|
// 여기서 콤보를 초기화 해선 안된다.
|
||||||
// 콤보가 초기화 되는 곳은 마지막 콤보가 끝나고 Motion 이 자동으로 Wait 으로 돌아가는 시점이다.
|
// 콤보가 초기화 되는 곳은 마지막 콤보가 끝나고 Motion 이 자동으로 Wait 으로 돌아가는 시점이다.
|
||||||
}
|
}
|
||||||
|
|
||||||
void CActorInstance::__ClearCombo()
|
void CActorInstance::__ClearCombo()
|
||||||
@ -566,7 +566,7 @@ bool CActorInstance::__CanPushDestActor(CActorInstance& rkActorDst)
|
|||||||
if (rkActorDst.IsNPC())
|
if (rkActorDst.IsNPC())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// 거대 몬스터 밀림 제외
|
// 거대 몬스터 밀림 제외
|
||||||
extern bool IS_HUGE_RACE(unsigned int vnum);
|
extern bool IS_HUGE_RACE(unsigned int vnum);
|
||||||
if (IS_HUGE_RACE(rkActorDst.GetRace()))
|
if (IS_HUGE_RACE(rkActorDst.GetRace()))
|
||||||
return false;
|
return false;
|
||||||
@ -587,15 +587,15 @@ bool IS_PARTY_HUNTING_RACE(unsigned int vnum)
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// 모든 몬스터 파티 사냥 적용
|
// 모든 몬스터 파티 사냥 적용
|
||||||
/*
|
/*
|
||||||
if (vnum < 8) // 플레이어
|
if (vnum < 8) // 플레이어
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (vnum >= 8000 && vnum <= 8112) // 메틴석
|
if (vnum >= 8000 && vnum <= 8112) // 메틴석
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (vnum >= 2400 && vnum < 5000) // 천의 동굴 이후 몬스터
|
if (vnum >= 2400 && vnum < 5000) // 천의 동굴 이후 몬스터
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -623,13 +623,13 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
|
|||||||
// Invisible Time
|
// Invisible Time
|
||||||
if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
|
if (IS_PARTY_HUNTING_RACE(rVictim.GetRace()))
|
||||||
{
|
{
|
||||||
if (uiSkill) // 파티 사냥 몬스터라도 스킬이면 무적시간 적용
|
if (uiSkill) // 파티 사냥 몬스터라도 스킬이면 무적시간 적용
|
||||||
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
|
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
|
||||||
|
|
||||||
if (m_isMain) // #0000794: [M2KR] 폴리모프 - 밸런싱 문제 타인 공격에 의한 무적 타임은 고려하지 않고 자신 공격에 의한것만 체크한다
|
if (m_isMain) // #0000794: [M2KR] 폴리모프 - 밸런싱 문제 타인 공격에 의한 무적 타임은 고려하지 않고 자신 공격에 의한것만 체크한다
|
||||||
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
|
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
|
||||||
}
|
}
|
||||||
else // 파티 사냥 몬스터가 아닐 경우만 적용
|
else // 파티 사냥 몬스터가 아닐 경우만 적용
|
||||||
{
|
{
|
||||||
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
|
rVictim.m_fInvisibleTime = CTimer::Instance().GetCurrentSecond() + c_rAttackData.fInvisibleTime;
|
||||||
}
|
}
|
||||||
@ -640,7 +640,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
|
|||||||
// Hit Effect
|
// Hit Effect
|
||||||
D3DXVECTOR3 vec3Effect(rVictim.m_x, rVictim.m_y, rVictim.m_z);
|
D3DXVECTOR3 vec3Effect(rVictim.m_x, rVictim.m_y, rVictim.m_z);
|
||||||
|
|
||||||
// #0000780: [M2KR] 수룡 타격구 문제
|
// #0000780: [M2KR] 수룡 타격구 문제
|
||||||
extern bool IS_HUGE_RACE(unsigned int vnum);
|
extern bool IS_HUGE_RACE(unsigned int vnum);
|
||||||
if (IS_HUGE_RACE(rVictim.GetRace()))
|
if (IS_HUGE_RACE(rVictim.GetRace()))
|
||||||
{
|
{
|
||||||
@ -651,7 +651,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
|
|||||||
|
|
||||||
float fHeight = D3DXToDegree(atan2(-vec3Effect.x + v3Pos.x,+vec3Effect.y - v3Pos.y));
|
float fHeight = D3DXToDegree(atan2(-vec3Effect.x + v3Pos.x,+vec3Effect.y - v3Pos.y));
|
||||||
|
|
||||||
// 2004.08.03.myevan.빌딩이나 문의 경우 타격 효과가 보이지 않는다
|
// 2004.08.03.myevan.빌딩이나 문의 경우 타격 효과가 보이지 않는다
|
||||||
if (rVictim.IsBuilding()||rVictim.IsDoor())
|
if (rVictim.IsBuilding()||rVictim.IsDoor())
|
||||||
{
|
{
|
||||||
D3DXVECTOR3 vec3Delta=vec3Effect-v3Pos;
|
D3DXVECTOR3 vec3Delta=vec3Effect-v3Pos;
|
||||||
@ -673,7 +673,7 @@ void CActorInstance::__ProcessDataAttackSuccess(const NRaceData::TAttackData & c
|
|||||||
|
|
||||||
if (rVictim.IsBuilding())
|
if (rVictim.IsBuilding())
|
||||||
{
|
{
|
||||||
// 2004.08.03.빌딩의 경우 흔들리면 이상하다
|
// 2004.08.03.빌딩의 경우 흔들리면 이상하다
|
||||||
}
|
}
|
||||||
else if (rVictim.IsStone() || rVictim.IsDoor())
|
else if (rVictim.IsStone() || rVictim.IsDoor())
|
||||||
{
|
{
|
||||||
|
@ -34,7 +34,7 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc
|
|||||||
{
|
{
|
||||||
if (!pPointInstance)
|
if (!pPointInstance)
|
||||||
{
|
{
|
||||||
assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // 레퍼런스로 교체하시오
|
assert(!"CActorInstance::UpdatePointInstance - pPointInstance is NULL"); // 레퍼런스로 교체하시오
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,12 +95,12 @@ void CActorInstance::UpdatePointInstance(TCollisionPointInstance * pPointInstanc
|
|||||||
|
|
||||||
void CActorInstance::UpdateAdvancingPointInstance()
|
void CActorInstance::UpdateAdvancingPointInstance()
|
||||||
{
|
{
|
||||||
// 말을 탔을 경우 사람은 이동값을 가지고 있지 않기 때문에 말로 부터 얻어와야 한다 - [levites]
|
// 말을 탔을 경우 사람은 이동값을 가지고 있지 않기 때문에 말로 부터 얻어와야 한다 - [levites]
|
||||||
D3DXVECTOR3 v3Movement = m_v3Movement;
|
D3DXVECTOR3 v3Movement = m_v3Movement;
|
||||||
if (m_pkHorse)
|
if (m_pkHorse)
|
||||||
v3Movement = m_pkHorse->m_v3Movement;
|
v3Movement = m_pkHorse->m_v3Movement;
|
||||||
|
|
||||||
// 말은 업데이트 하지 않아도 된다 - [levites]
|
// 말은 업데이트 하지 않아도 된다 - [levites]
|
||||||
if (m_pkHorse)
|
if (m_pkHorse)
|
||||||
m_pkHorse->UpdateAdvancingPointInstance();
|
m_pkHorse->UpdateAdvancingPointInstance();
|
||||||
|
|
||||||
@ -169,7 +169,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector
|
|||||||
{
|
{
|
||||||
if (!c_pAttackingSphereVector)
|
if (!c_pAttackingSphereVector)
|
||||||
{
|
{
|
||||||
assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // 레퍼런스로 교체하시오
|
assert(!"CActorInstance::CheckCollisionDetection - c_pAttackingSphereVector is NULL"); // 레퍼런스로 교체하시오
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,7 +186,7 @@ bool CActorInstance::CheckCollisionDetection(const CDynamicSphereInstanceVector
|
|||||||
|
|
||||||
if (DetectCollisionDynamicSphereVSDynamicSphere(c_rAttackingSphere, c_rDefendingSphere))
|
if (DetectCollisionDynamicSphereVSDynamicSphere(c_rAttackingSphere, c_rDefendingSphere))
|
||||||
{
|
{
|
||||||
// FIXME : 두 원의 교점을 찾아내는 식으로 바꿔야 한다.
|
// FIXME : 두 원의 교점을 찾아내는 식으로 바꿔야 한다.
|
||||||
*pv3Position = (c_rAttackingSphere.v3Position + c_rDefendingSphere.v3Position) / 2.0f;
|
*pv3Position = (c_rAttackingSphere.v3Position + c_rDefendingSphere.v3Position) / 2.0f;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -200,19 +200,19 @@ bool CActorInstance::CreateCollisionInstancePiece(DWORD dwAttachingModelIndex, c
|
|||||||
{
|
{
|
||||||
if (!c_pAttachingData)
|
if (!c_pAttachingData)
|
||||||
{
|
{
|
||||||
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // 레퍼런스로 교체하시오
|
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData is NULL"); // 레퍼런스로 교체하시오
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!c_pAttachingData->pCollisionData)
|
if (!c_pAttachingData->pCollisionData)
|
||||||
{
|
{
|
||||||
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // 레퍼런스로 교체하시오
|
assert(!"CActorInstance::CreateCollisionInstancePiece - c_pAttachingData->pCollisionData is NULL"); // 레퍼런스로 교체하시오
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pPointInstance)
|
if (!pPointInstance)
|
||||||
{
|
{
|
||||||
assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // 레퍼런스로 교체하시오
|
assert(!"CActorInstance::CreateCollisionInstancePiece - pPointInstance is NULL"); // 레퍼런스로 교체하시오
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,18 +279,18 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
|
|||||||
const NRaceData::TAttackData & c_rAttackData = c_pAttackingEvent->AttackData;
|
const NRaceData::TAttackData & c_rAttackData = c_pAttackingEvent->AttackData;
|
||||||
THittedInstanceMap & rHittedInstanceMap = m_kSplashArea.HittedInstanceMap;
|
THittedInstanceMap & rHittedInstanceMap = m_kSplashArea.HittedInstanceMap;
|
||||||
|
|
||||||
// NOTE : 이미 때렸다면 때릴 수 없음
|
// NOTE : 이미 때렸다면 때릴 수 없음
|
||||||
if (rHittedInstanceMap.end() != rHittedInstanceMap.find(&rVictim))
|
if (rHittedInstanceMap.end() != rHittedInstanceMap.find(&rVictim))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE : Snipe 모드이고..
|
// NOTE : Snipe 모드이고..
|
||||||
if (NRaceData::ATTACK_TYPE_SNIPE == c_rAttackData.iAttackType)
|
if (NRaceData::ATTACK_TYPE_SNIPE == c_rAttackData.iAttackType)
|
||||||
{
|
{
|
||||||
// Target 이 PC 라면..
|
// Target 이 PC 라면..
|
||||||
if (__IsFlyTargetPC())
|
if (__IsFlyTargetPC())
|
||||||
// 다른 객체는 때릴 수 없다
|
// 다른 객체는 때릴 수 없다
|
||||||
if (!__IsSameFlyTarget(&rVictim))
|
if (!__IsSameFlyTarget(&rVictim))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -299,7 +299,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
|
|||||||
{
|
{
|
||||||
CActorInstance * pActorInstance = (CActorInstance *)m_kFlyTarget.GetFlyTarget();
|
CActorInstance * pActorInstance = (CActorInstance *)m_kFlyTarget.GetFlyTarget();
|
||||||
|
|
||||||
// NOTE : Target 이 PC 일때는 한명만 때릴 수 있다.
|
// NOTE : Target 이 PC 일때는 한명만 때릴 수 있다.
|
||||||
if (pActorInstance->IsPC())
|
if (pActorInstance->IsPC())
|
||||||
if (&rVictim != pActorInstance)
|
if (&rVictim != pActorInstance)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -333,7 +333,7 @@ BOOL CActorInstance::__SplashAttackProcess(CActorInstance & rVictim)
|
|||||||
BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
|
BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
|
||||||
{
|
{
|
||||||
// Check Distance
|
// Check Distance
|
||||||
// NOTE - 일단 근접 체크만 하고 있음
|
// NOTE - 일단 근접 체크만 하고 있음
|
||||||
D3DXVECTOR3 v3Distance(rVictim.m_x - m_x, rVictim.m_z - m_z, rVictim.m_z - m_z);
|
D3DXVECTOR3 v3Distance(rVictim.m_x - m_x, rVictim.m_z - m_z, rVictim.m_z - m_z);
|
||||||
float fDistance = D3DXVec3LengthSq(&v3Distance);
|
float fDistance = D3DXVec3LengthSq(&v3Distance);
|
||||||
|
|
||||||
@ -362,7 +362,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
|
|||||||
{
|
{
|
||||||
const NRaceData::THitData & c_rHitData = *itorHitData;
|
const NRaceData::THitData & c_rHitData = *itorHitData;
|
||||||
|
|
||||||
// NOTE : 이미 맞았는지 체크
|
// NOTE : 이미 맞았는지 체크
|
||||||
THitDataMap::iterator itHitData = m_HitDataMap.find(&c_rHitData);
|
THitDataMap::iterator itHitData = m_HitDataMap.find(&c_rHitData);
|
||||||
if (itHitData != m_HitDataMap.end())
|
if (itHitData != m_HitDataMap.end())
|
||||||
{
|
{
|
||||||
@ -437,7 +437,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
|
|||||||
//Tracef(" ----------- Next Hit : %d\n", itHitData->second.size());
|
//Tracef(" ----------- Next Hit : %d\n", itHitData->second.size());
|
||||||
|
|
||||||
int iCurrentHitCount = itHitData->second.size();
|
int iCurrentHitCount = itHitData->second.size();
|
||||||
// NOTE : 보통 공격은 16명이 한계
|
// NOTE : 보통 공격은 16명이 한계
|
||||||
if (NRaceData::MOTION_TYPE_COMBO == pad->iMotionType || NRaceData::MOTION_TYPE_NORMAL == pad->iMotionType)
|
if (NRaceData::MOTION_TYPE_COMBO == pad->iMotionType || NRaceData::MOTION_TYPE_NORMAL == pad->iMotionType)
|
||||||
{
|
{
|
||||||
if (iCurrentHitCount > 16)
|
if (iCurrentHitCount > 16)
|
||||||
@ -458,7 +458,7 @@ BOOL CActorInstance::__NormalAttackProcess(CActorInstance & rVictim)
|
|||||||
|
|
||||||
D3DXVECTOR3 v3HitPosition = (GetPosition() + rVictim.GetPosition()) *0.5f;
|
D3DXVECTOR3 v3HitPosition = (GetPosition() + rVictim.GetPosition()) *0.5f;
|
||||||
|
|
||||||
// #0000780: [M2KR] 수룡 타격구 문제
|
// #0000780: [M2KR] 수룡 타격구 문제
|
||||||
extern bool IS_HUGE_RACE(unsigned int vnum);
|
extern bool IS_HUGE_RACE(unsigned int vnum);
|
||||||
if (IS_HUGE_RACE(rVictim.GetRace()))
|
if (IS_HUGE_RACE(rVictim.GetRace()))
|
||||||
{
|
{
|
||||||
@ -503,8 +503,8 @@ BOOL CActorInstance::TestPhysicsBlendingCollision(CActorInstance & rVictim)
|
|||||||
if (fDistance > 800.0f*800.0f)
|
if (fDistance > 800.0f*800.0f)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
|
// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
|
||||||
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
|
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
|
||||||
TCollisionPointInstanceList * pMainList;
|
TCollisionPointInstanceList * pMainList;
|
||||||
TCollisionPointInstanceList * pVictimList;
|
TCollisionPointInstanceList * pVictimList;
|
||||||
if (isAttacking() || IsWaiting())
|
if (isAttacking() || IsWaiting())
|
||||||
@ -589,17 +589,17 @@ BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// Check Distance
|
// Check Distance
|
||||||
// NOTE : 적당히 멀면 체크 안함
|
// NOTE : 적당히 멀면 체크 안함
|
||||||
// 프레임 스킵시나 대상 오브젝트의 크기가 클경우 문제가 생길 여지가 있음
|
// 프레임 스킵시나 대상 오브젝트의 크기가 클경우 문제가 생길 여지가 있음
|
||||||
// 캐릭터가 자신의 Body Sphere Radius 보다 더 크게 이동했는지를 체크하고,
|
// 캐릭터가 자신의 Body Sphere Radius 보다 더 크게 이동했는지를 체크하고,
|
||||||
// 만약 그렇지 않다면 거리로 체크해서 걸러준다.
|
// 만약 그렇지 않다면 거리로 체크해서 걸러준다.
|
||||||
D3DXVECTOR3 v3Distance = D3DXVECTOR3(rVictim.m_x - m_x, rVictim.m_y - m_y, rVictim.m_z - m_z);
|
D3DXVECTOR3 v3Distance = D3DXVECTOR3(rVictim.m_x - m_x, rVictim.m_y - m_y, rVictim.m_z - m_z);
|
||||||
float fDistance = D3DXVec3LengthSq(&v3Distance);
|
float fDistance = D3DXVec3LengthSq(&v3Distance);
|
||||||
if (fDistance > 800.0f*800.0f)
|
if (fDistance > 800.0f*800.0f)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
|
// NOTE : 공격 중일때는 Defending Sphere로 Collision Check를 합니다.
|
||||||
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
|
// NOTE : Wait로 블렌딩 되는 도중에 뚫고 들어가는 문제가 있어서.. - [levites]
|
||||||
TCollisionPointInstanceList * pMainList;
|
TCollisionPointInstanceList * pMainList;
|
||||||
TCollisionPointInstanceList * pVictimList;
|
TCollisionPointInstanceList * pVictimList;
|
||||||
if (isAttacking() || IsWaiting())
|
if (isAttacking() || IsWaiting())
|
||||||
|
@ -79,7 +79,7 @@ bool CActorInstance::SetRace(DWORD eRace)
|
|||||||
|
|
||||||
CGraphicThingInstance::Clear();
|
CGraphicThingInstance::Clear();
|
||||||
|
|
||||||
//NOTE : PC만 Part별로 다 생성하게 해준다.
|
//NOTE : PC만 Part별로 다 생성하게 해준다.
|
||||||
if( IsPC())
|
if( IsPC())
|
||||||
{
|
{
|
||||||
CGraphicThingInstance::ReserveModelThing(CRaceData::PART_MAX_NUM);
|
CGraphicThingInstance::ReserveModelThing(CRaceData::PART_MAX_NUM);
|
||||||
|
@ -107,7 +107,7 @@ void CActorInstance::SetFlyEventHandler(IFlyEventHandler * pHandler)
|
|||||||
m_pFlyEventHandler = pHandler;
|
m_pFlyEventHandler = pHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
|
// 2004. 07. 07. [levites] - 스킬 사용중 타겟이 바뀌는 문제 해결을 위한 코드
|
||||||
bool CActorInstance::CanChangeTarget()
|
bool CActorInstance::CanChangeTarget()
|
||||||
{
|
{
|
||||||
if (__IsNeedFlyTargetMotion())
|
if (__IsNeedFlyTargetMotion())
|
||||||
|
@ -69,7 +69,7 @@ void CActorInstance::ReservingMotionProcess()
|
|||||||
|
|
||||||
SetEndStopMotion();
|
SetEndStopMotion();
|
||||||
|
|
||||||
// 이후의 모션 전부 1초씩 딜레이
|
// 이후의 모션 전부 1초씩 딜레이
|
||||||
TMotionDeque::iterator itor = m_MotionDeque.begin();
|
TMotionDeque::iterator itor = m_MotionDeque.begin();
|
||||||
for (; itor != m_MotionDeque.end(); ++itor)
|
for (; itor != m_MotionDeque.end(); ++itor)
|
||||||
{
|
{
|
||||||
@ -99,11 +99,11 @@ void CActorInstance::ReservingMotionProcess()
|
|||||||
if (IsDead())
|
if (IsDead())
|
||||||
{
|
{
|
||||||
//Tracenf("\xC0\xCF\xBE\xEE\xBC\xAD\xB7\xC1\xB0\xED \xC7\xDF\xC0\xB8\xB3\xAA \xBB\xE7\xB8\xC1");
|
//Tracenf("\xC0\xCF\xBE\xEE\xBC\xAD\xB7\xC1\xB0\xED \xC7\xDF\xC0\xB8\xB3\xAA \xBB\xE7\xB8\xC1");
|
||||||
// 예전 데이터로 복구
|
// 예전 데이터로 복구
|
||||||
m_kCurMotNode=kPrevMotionNode;
|
m_kCurMotNode=kPrevMotionNode;
|
||||||
__ClearMotion();
|
__ClearMotion();
|
||||||
|
|
||||||
// 이전 동작 마지막 상태 유지
|
// 이전 동작 마지막 상태 유지
|
||||||
SetEndStopMotion();
|
SetEndStopMotion();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -129,7 +129,7 @@ void CActorInstance::ReservingMotionProcess()
|
|||||||
if (0 == dwRealMotionKey)
|
if (0 == dwRealMotionKey)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// FIX: 위에서 호출한 __SetMotion 함수 안에서 랜덤으로 다른 모션을 재생할 가능성도 있으므로 duration은 '현재 재생중인' 모션의 duration값을 사용해야 함.
|
// FIX: 위에서 호출한 __SetMotion 함수 안에서 랜덤으로 다른 모션을 재생할 가능성도 있으므로 duration은 '현재 재생중인' 모션의 duration값을 사용해야 함.
|
||||||
//float fDurationTime=rReservingMotionNode.fDuration;
|
//float fDurationTime=rReservingMotionNode.fDuration;
|
||||||
float fDurationTime = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
|
float fDurationTime = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
|
||||||
float fStartTime = rReservingMotionNode.fStartTime;
|
float fStartTime = rReservingMotionNode.fStartTime;
|
||||||
@ -153,7 +153,7 @@ void CActorInstance::ReservingMotionProcess()
|
|||||||
|
|
||||||
void CActorInstance::CurrentMotionProcess()
|
void CActorInstance::CurrentMotionProcess()
|
||||||
{
|
{
|
||||||
if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // 임시다. 최종적인 목표는 Once도 절대로 넘어가선 안된다. - [levites]
|
if (MOTION_TYPE_LOOP == m_kCurMotNode.iMotionType) // 임시다. 최종적인 목표는 Once도 절대로 넘어가선 안된다. - [levites]
|
||||||
if (m_kCurMotNode.dwcurFrame >= m_kCurMotNode.dwFrameCount)
|
if (m_kCurMotNode.dwcurFrame >= m_kCurMotNode.dwFrameCount)
|
||||||
m_kCurMotNode.dwcurFrame = 0;
|
m_kCurMotNode.dwcurFrame = 0;
|
||||||
|
|
||||||
@ -169,7 +169,7 @@ void CActorInstance::CurrentMotionProcess()
|
|||||||
|
|
||||||
bool isLooping=false;
|
bool isLooping=false;
|
||||||
|
|
||||||
// 끝났다면 Playing Flag를 끈다
|
// 끝났다면 Playing Flag를 끈다
|
||||||
if (m_pkCurRaceMotionData && m_pkCurRaceMotionData->IsLoopMotion())
|
if (m_pkCurRaceMotionData && m_pkCurRaceMotionData->IsLoopMotion())
|
||||||
{
|
{
|
||||||
if (m_kCurMotNode.iLoopCount > 1 || m_kCurMotNode.iLoopCount == -1)
|
if (m_kCurMotNode.iLoopCount > 1 || m_kCurMotNode.iLoopCount == -1)
|
||||||
@ -332,7 +332,7 @@ void CActorInstance::SetLoopMotion(DWORD dwMotion, float fBlendTime, float fSpee
|
|||||||
m_kCurMotNode.uSkill = 0;
|
m_kCurMotNode.uSkill = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 리턴값 == SetMotion의 리턴값 == 실제로 애니메이션 데이터를 플레이 했느냐?
|
// 리턴값 == SetMotion의 리턴값 == 실제로 애니메이션 데이터를 플레이 했느냐?
|
||||||
bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime, UINT uSkill, float fSpeedRatio)
|
bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion, float fBlendTime, UINT uSkill, float fSpeedRatio)
|
||||||
{
|
{
|
||||||
if (!m_pkCurRaceData)
|
if (!m_pkCurRaceData)
|
||||||
@ -379,8 +379,8 @@ bool CActorInstance::InterceptMotion(EMotionPushType iMotionType, WORD wMotion,
|
|||||||
|
|
||||||
assert(NULL != m_pkCurRaceMotionData);
|
assert(NULL != m_pkCurRaceMotionData);
|
||||||
|
|
||||||
// FIX : 위에서 호출한 __SetMotion 함수 내에서 랜덤으로 다른 모션을 선택할 수도 있기 때문에 dwMotionKey값은 유효하지 않고
|
// FIX : 위에서 호출한 __SetMotion 함수 내에서 랜덤으로 다른 모션을 선택할 수도 있기 때문에 dwMotionKey값은 유효하지 않고
|
||||||
// 따라서 해당 키로 산출한 duration은 유효하지 않음. 당연히 현재 play중인 모션의 시간을 구해야 함.. -_-;;
|
// 따라서 해당 키로 산출한 duration은 유효하지 않음. 당연히 현재 play중인 모션의 시간을 구해야 함.. -_-;;
|
||||||
// float fDuration=GetMotionDuration(dwMotionKey)/fSpeedRatio;
|
// float fDuration=GetMotionDuration(dwMotionKey)/fSpeedRatio;
|
||||||
float fDuration = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
|
float fDuration = GetMotionDuration(dwRealMotionKey) / fSpeedRatio;
|
||||||
|
|
||||||
@ -588,8 +588,8 @@ float CActorInstance::GetMotionDuration(DWORD dwMotionKey)
|
|||||||
|
|
||||||
MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey)
|
MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey)
|
||||||
{
|
{
|
||||||
// NOTE : 자주 호출 되는 부분은 아니지만 어느 정도의 최적화 여지가 있음 - [levites]
|
// NOTE : 자주 호출 되는 부분은 아니지만 어느 정도의 최적화 여지가 있음 - [levites]
|
||||||
// FIXME : 처음에 선택된 모션이 없는 것에 대한 처리가 되어 있지 않다.
|
// FIXME : 처음에 선택된 모션이 없는 것에 대한 처리가 되어 있지 않다.
|
||||||
WORD wMode = GET_MOTION_MODE(dwMotionKey);
|
WORD wMode = GET_MOTION_MODE(dwMotionKey);
|
||||||
WORD wIndex = GET_MOTION_INDEX(dwMotionKey);
|
WORD wIndex = GET_MOTION_INDEX(dwMotionKey);
|
||||||
|
|
||||||
@ -608,7 +608,7 @@ MOTION_KEY CActorInstance::GetRandomMotionKey(MOTION_KEY dwMotionKey)
|
|||||||
dwMotionKey = MAKE_RANDOM_MOTION_KEY(wMode, wIndex, i);
|
dwMotionKey = MAKE_RANDOM_MOTION_KEY(wMode, wIndex, i);
|
||||||
|
|
||||||
// Temporary
|
// Temporary
|
||||||
// NOTE: 현재로선 여기서 해봤자 의미없다. 전체적으로 확인결과 아래는 씹히는 코드고 다른곳에서 해결해야 하므로 일단 주석처리함. 나중에 통채로 지우자..
|
// NOTE: 현재로선 여기서 해봤자 의미없다. 전체적으로 확인결과 아래는 씹히는 코드고 다른곳에서 해결해야 하므로 일단 주석처리함. 나중에 통채로 지우자..
|
||||||
// m_kCurMotNode.fEndTime = m_kCurMotNode.fStartTime + GetMotionDuration(dwMotionKey);
|
// m_kCurMotNode.fEndTime = m_kCurMotNode.fStartTime + GetMotionDuration(dwMotionKey);
|
||||||
// Temporary
|
// Temporary
|
||||||
|
|
||||||
@ -689,7 +689,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// NOTE : 스킬 사용중 사라지는 문제를 위한 안전 장치 - [levites]
|
// NOTE : 스킬 사용중 사라지는 문제를 위한 안전 장치 - [levites]
|
||||||
if (__IsHiding())
|
if (__IsHiding())
|
||||||
{
|
{
|
||||||
__ShowEvent();
|
__ShowEvent();
|
||||||
@ -719,7 +719,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
|
|||||||
m_pkHorse->__BindMotionData(dwChildMotKey);
|
m_pkHorse->__BindMotionData(dwChildMotKey);
|
||||||
|
|
||||||
if (c_rkSetMotData.iLoopCount)
|
if (c_rkSetMotData.iLoopCount)
|
||||||
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // 무조건 이전 모션 타입으로 설정되고 있었음
|
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_ONCE; // 무조건 이전 모션 타입으로 설정되고 있었음
|
||||||
else
|
else
|
||||||
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_LOOP;
|
m_pkHorse->m_kCurMotNode.iMotionType = MOTION_TYPE_LOOP;
|
||||||
|
|
||||||
@ -741,7 +741,7 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
|
|||||||
|
|
||||||
if (__CanAttack())
|
if (__CanAttack())
|
||||||
{
|
{
|
||||||
// 여기서 공격 모션일 경우의 처리를 합니다 - [levites]
|
// 여기서 공격 모션일 경우의 처리를 합니다 - [levites]
|
||||||
__ShowWeaponTrace();
|
__ShowWeaponTrace();
|
||||||
|
|
||||||
m_HitDataMap.clear();
|
m_HitDataMap.clear();
|
||||||
@ -752,11 +752,11 @@ DWORD CActorInstance::__SetMotion(const SSetMotionData& c_rkSetMotData, DWORD dw
|
|||||||
{
|
{
|
||||||
if (!__CanNextComboAttack())
|
if (!__CanNextComboAttack())
|
||||||
{
|
{
|
||||||
// 2004.11.19.myevan.동물 변신시 이부분에서 바로 리셋되어 다음동작 안나온다
|
// 2004.11.19.myevan.동물 변신시 이부분에서 바로 리셋되어 다음동작 안나온다
|
||||||
m_dwcurComboIndex = 0; // 콤보 리셋 - [levites]
|
m_dwcurComboIndex = 0; // 콤보 리셋 - [levites]
|
||||||
|
|
||||||
// NOTE : ClearCombo() 를 수행해서는 안된다.
|
// NOTE : ClearCombo() 를 수행해서는 안된다.
|
||||||
// 콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다.
|
// 콤보 다음에 스킬을 이어서 사용할 경우 m_pkCurRaceMotionData까지 초기화 되어 버린다.
|
||||||
//Tracef("MotionData\xBF\xA1 \xC4\xDE\xBA\xB8 \xB5\xA5\xC0\xCC\xC5\xB8\xB0\xA1 \xB5\xE9\xBE\xEE \xC0\xD6\xC1\xF6 \xBE\xCA\xBD\xC0\xB4\xCF\xB4\xD9.\n");
|
//Tracef("MotionData\xBF\xA1 \xC4\xDE\xBA\xB8 \xB5\xA5\xC0\xCC\xC5\xB8\xB0\xA1 \xB5\xE9\xBE\xEE \xC0\xD6\xC1\xF6 \xBE\xCA\xBD\xC0\xB4\xCF\xB4\xD9.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -303,7 +303,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD
|
|||||||
if (CRaceMotionData::MOTION_EVENT_TYPE_WARP != c_pData->iType)
|
if (CRaceMotionData::MOTION_EVENT_TYPE_WARP != c_pData->iType)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// FIXME : TMotionWarpEventData로 뺄 변수 - [levites]
|
// FIXME : TMotionWarpEventData로 뺄 변수 - [levites]
|
||||||
static const float sc_fDistanceFromTarget = 270.0f;
|
static const float sc_fDistanceFromTarget = 270.0f;
|
||||||
|
|
||||||
if (m_kFlyTarget.IsValidTarget())
|
if (m_kFlyTarget.IsValidTarget())
|
||||||
@ -315,7 +315,7 @@ void CActorInstance::ProcessMotionEventWarp(const CRaceMotionData::TMotionEventD
|
|||||||
D3DXVec3Normalize(&v3Distance, &v3Distance);
|
D3DXVec3Normalize(&v3Distance, &v3Distance);
|
||||||
TPixelPosition DestPixelPosition = c_rv3TargetPosition - (v3Distance * sc_fDistanceFromTarget);
|
TPixelPosition DestPixelPosition = c_rv3TargetPosition - (v3Distance * sc_fDistanceFromTarget);
|
||||||
|
|
||||||
// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결. 목표위치가 이동 못하는 곳일 경우 이동하지 않는다
|
// 2004.07.05.myevan.궁신탄영 맵에 끼이는 문제해결. 목표위치가 이동 못하는 곳일 경우 이동하지 않는다
|
||||||
IBackground& rkBG=GetBackground();
|
IBackground& rkBG=GetBackground();
|
||||||
if (!rkBG.IsBlock(DestPixelPosition.x, -DestPixelPosition.y))
|
if (!rkBG.IsBlock(DestPixelPosition.x, -DestPixelPosition.y))
|
||||||
SetPixelPosition(DestPixelPosition);
|
SetPixelPosition(DestPixelPosition);
|
||||||
|
@ -38,8 +38,8 @@ void CActorInstance::OnRender()
|
|||||||
kMtrl.Diffuse=D3DXCOLOR(m_dwMtrlColor);
|
kMtrl.Diffuse=D3DXCOLOR(m_dwMtrlColor);
|
||||||
STATEMANAGER.SetMaterial(&kMtrl);
|
STATEMANAGER.SetMaterial(&kMtrl);
|
||||||
|
|
||||||
// 현재는 이렇게.. 최종적인 형태는 Diffuse와 Blend의 분리로..
|
// 현재는 이렇게.. 최종적인 형태는 Diffuse와 Blend의 분리로..
|
||||||
// 아니면 이런 형태로 가되 Texture & State Sorting 지원으로.. - [levites]
|
// 아니면 이런 형태로 가되 Texture & State Sorting 지원으로.. - [levites]
|
||||||
STATEMANAGER.SaveRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
|
STATEMANAGER.SaveRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
|
||||||
|
|
||||||
switch(m_iRenderMode)
|
switch(m_iRenderMode)
|
||||||
|
@ -62,7 +62,7 @@ void CActorInstance::RotationProcess()
|
|||||||
m_fcurRotation = m_rotEnd;
|
m_fcurRotation = m_rotEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9"로 바꾼다. - [levites]
|
// FIXME : "\xB0\xC7\xB9\xB0\xC0\xCF\xB6\xA7\xB8\xB8 \xC3\xBC\xC5\xA9"로 바꾼다. - [levites]
|
||||||
if (0.0f != m_rotX || 0.0f != m_rotY)
|
if (0.0f != m_rotX || 0.0f != m_rotY)
|
||||||
{
|
{
|
||||||
CGraphicObjectInstance::SetRotation(m_rotX, m_rotY, m_fcurRotation);
|
CGraphicObjectInstance::SetRotation(m_rotX, m_rotY, m_fcurRotation);
|
||||||
|
@ -483,7 +483,7 @@ void CArea::__Load_BuildObjectInstances()
|
|||||||
|
|
||||||
__SetObjectInstance(*it, c_pObjectData);
|
__SetObjectInstance(*it, c_pObjectData);
|
||||||
|
|
||||||
// 최적화용
|
// 최적화용
|
||||||
if ((*it)->dwType == prt::PROPERTY_TYPE_BUILDING)
|
if ((*it)->dwType == prt::PROPERTY_TYPE_BUILDING)
|
||||||
m_GraphicThingInstanceCRCMap.insert(TGraphicThingInstanceCRCMap::value_type( (*it)->pThingInstance, c_pObjectData->dwCRC ) );
|
m_GraphicThingInstanceCRCMap.insert(TGraphicThingInstanceCRCMap::value_type( (*it)->pThingInstance, c_pObjectData->dwCRC ) );
|
||||||
}
|
}
|
||||||
@ -718,7 +718,7 @@ void CArea::__SetObjectInstance_SetDungeonBlock(TObjectInstance * pObjectInstanc
|
|||||||
|
|
||||||
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
|
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
|
||||||
{
|
{
|
||||||
// OBB를 사용한 충돌 정보 자동 생성.
|
// OBB를 사용한 충돌 정보 자동 생성.
|
||||||
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
|
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
|
||||||
|
|
||||||
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
|
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
|
||||||
@ -736,7 +736,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
|
|||||||
|
|
||||||
const bool bIsDungeonObject = (std::string::npos != attrFileName.find("/dungeon/")) || (std::string::npos != attrFileName.find("\\dungeon\\"));
|
const bool bIsDungeonObject = (std::string::npos != attrFileName.find("/dungeon/")) || (std::string::npos != attrFileName.find("\\dungeon\\"));
|
||||||
|
|
||||||
// NOTE: dungeon 오브젝트는 Dummy Collision을 자동으로 생성하지 않도록 함 (던전의 경우 더미 컬리전때문에 문제가 된 경우가 수차례 있었음. 이렇게 하기로 그래픽 팀과 협의 완료)
|
// NOTE: dungeon 오브젝트는 Dummy Collision을 자동으로 생성하지 않도록 함 (던전의 경우 더미 컬리전때문에 문제가 된 경우가 수차례 있었음. 이렇게 하기로 그래픽 팀과 협의 완료)
|
||||||
if (pAttributeData->IsEmpty() && false == bIsDungeonObject)
|
if (pAttributeData->IsEmpty() && false == bIsDungeonObject)
|
||||||
{
|
{
|
||||||
if (NULL != pObjectInstance && NULL != pObjectInstance->pThingInstance)
|
if (NULL != pObjectInstance && NULL != pObjectInstance->pThingInstance)
|
||||||
@ -778,7 +778,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
|
|||||||
/*
|
/*
|
||||||
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
|
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
|
||||||
{
|
{
|
||||||
// AABB를 사용한 충돌 정보 자동 생성.
|
// AABB를 사용한 충돌 정보 자동 생성.
|
||||||
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
|
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
|
||||||
|
|
||||||
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
|
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
|
||||||
@ -806,7 +806,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
|
|||||||
collision.v3Position = (v3Min + v3Max) * 0.5f;
|
collision.v3Position = (v3Min + v3Max) * 0.5f;
|
||||||
|
|
||||||
D3DXVECTOR3 vDelta = (v3Max - v3Min);
|
D3DXVECTOR3 vDelta = (v3Max - v3Min);
|
||||||
collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max를 구하기 위한 가로, 세로, 높이의 절반값 저장
|
collision.fDimensions[0] = vDelta.x * 0.5f; // v3Min, v3Max를 구하기 위한 가로, 세로, 높이의 절반값 저장
|
||||||
collision.fDimensions[1] = vDelta.y * 0.5f;
|
collision.fDimensions[1] = vDelta.y * 0.5f;
|
||||||
collision.fDimensions[2] = vDelta.z * 0.5f;
|
collision.fDimensions[2] = vDelta.z * 0.5f;
|
||||||
|
|
||||||
@ -830,7 +830,7 @@ void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_sz
|
|||||||
/*
|
/*
|
||||||
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
|
void CArea::__LoadAttribute(TObjectInstance * pObjectInstance, const char * c_szAttributeFileName)
|
||||||
{
|
{
|
||||||
// Sphere를 사용한 충돌 정보 자동 생성.
|
// Sphere를 사용한 충돌 정보 자동 생성.
|
||||||
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
|
const bool bFileExist = CResourceManager::Instance().IsFileExist(c_szAttributeFileName);
|
||||||
|
|
||||||
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
|
CAttributeData * pAttributeData = (CAttributeData *) CResourceManager::Instance().GetResourcePointer(c_szAttributeFileName);
|
||||||
@ -940,7 +940,7 @@ bool CArea::__Load_LoadObject(const char * c_szFileName)
|
|||||||
ObjectData.Position.z = atof(c_rstrzPosition.c_str());
|
ObjectData.Position.z = atof(c_rstrzPosition.c_str());
|
||||||
ObjectData.dwCRC = atoi (c_rstrCRC.c_str());
|
ObjectData.dwCRC = atoi (c_rstrCRC.c_str());
|
||||||
|
|
||||||
// 20041217.myevan.로테이션 공식 변경
|
// 20041217.myevan.로테이션 공식 변경
|
||||||
ObjectData.InitializeRotation(); //ObjectData.m_fYaw = ObjectData.m_fPitch = ObjectData.m_fRoll = 0;
|
ObjectData.InitializeRotation(); //ObjectData.m_fYaw = ObjectData.m_fPitch = ObjectData.m_fRoll = 0;
|
||||||
if (rVector.size() > 4)
|
if (rVector.size() > 4)
|
||||||
{
|
{
|
||||||
@ -1040,7 +1040,7 @@ bool CArea::__Load_LoadAmbience(const char * c_szFileName)
|
|||||||
ObjectData.dwCRC = atoi (c_rstrCRC.c_str());
|
ObjectData.dwCRC = atoi (c_rstrCRC.c_str());
|
||||||
ObjectData.dwRange = atoi(c_rstrRange.c_str());
|
ObjectData.dwRange = atoi(c_rstrRange.c_str());
|
||||||
|
|
||||||
// 20041217.myevan.로테이션 초기화
|
// 20041217.myevan.로테이션 초기화
|
||||||
ObjectData.InitializeRotation();
|
ObjectData.InitializeRotation();
|
||||||
ObjectData.m_fHeightBias = 0.0f;
|
ObjectData.m_fHeightBias = 0.0f;
|
||||||
ObjectData.fMaxVolumeAreaPercentage = 0.0f;
|
ObjectData.fMaxVolumeAreaPercentage = 0.0f;
|
||||||
@ -1274,7 +1274,7 @@ void CArea::__Clear_DestroyObjectInstance(TObjectInstance * pObjectInstance)
|
|||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// Coordination 관련
|
// Coordination 관련
|
||||||
void CArea::GetCoordinate(unsigned short * usCoordX, unsigned short * usCoordY)
|
void CArea::GetCoordinate(unsigned short * usCoordX, unsigned short * usCoordY)
|
||||||
{
|
{
|
||||||
*usCoordX = m_wX;
|
*usCoordX = m_wX;
|
||||||
|
@ -111,7 +111,7 @@ void TEMP_CAreaLoaderThread::Shutdown()
|
|||||||
}
|
}
|
||||||
while (!bRet);
|
while (!bRet);
|
||||||
|
|
||||||
WaitForSingleObject(m_hThread, 10000); // 쓰레드가 종료 되기를 10초 기다림
|
WaitForSingleObject(m_hThread, 10000); // 쓰레드가 종료 되기를 10초 기다림
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT TEMP_CAreaLoaderThread::Execute(void * pvArg)
|
UINT TEMP_CAreaLoaderThread::Execute(void * pvArg)
|
||||||
|
@ -130,7 +130,7 @@ bool CTerrain::LoadShadowMap(const char * c_pszFileName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// Seamless용 새로운 함수들...
|
// Seamless용 새로운 함수들...
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CTerrain::CopySettingFromGlobalSetting()
|
void CTerrain::CopySettingFromGlobalSetting()
|
||||||
@ -891,7 +891,7 @@ void CTerrain::PutImage16(BYTE *src, BYTE *dst, long src_pitch, long dst_pitch,
|
|||||||
for (int x = 0; x < texturewidth; ++x)
|
for (int x = 0; x < texturewidth; ++x)
|
||||||
{
|
{
|
||||||
WORD packed_pixel = src[x] << 8;
|
WORD packed_pixel = src[x] << 8;
|
||||||
//& 연산 한번이 아깝다
|
//& 연산 한번이 아깝다
|
||||||
//WORD packed_pixel = (src[x]&0xF0) << 8;
|
//WORD packed_pixel = (src[x]&0xF0) << 8;
|
||||||
*((WORD*)(dst+x*2)) = packed_pixel;
|
*((WORD*)(dst+x*2)) = packed_pixel;
|
||||||
}
|
}
|
||||||
@ -998,11 +998,11 @@ void CTerrain::_CalculateTerrainPatch(BYTE byPatchNumX, BYTE byPatchNumY)
|
|||||||
lpTerrainVertex->kPosition = kPosition;
|
lpTerrainVertex->kPosition = kPosition;
|
||||||
lpTerrainVertex->kNormal = kNormal;
|
lpTerrainVertex->kNormal = kNormal;
|
||||||
|
|
||||||
if (0.5f > kNormal.z) // 수평으로 부터 30도 이하 각으로 기울어져 있다. Cliff type으로 정의
|
if (0.5f > kNormal.z) // 수평으로 부터 30도 이하 각으로 기울어져 있다. Cliff type으로 정의
|
||||||
++wNumCliffType;
|
++wNumCliffType;
|
||||||
else if (0.8660254f > kNormal.z) // 수평으로 부터 60도 이하 각으로 기울어져 있다. Hill type으로 정의
|
else if (0.8660254f > kNormal.z) // 수평으로 부터 60도 이하 각으로 기울어져 있다. Hill type으로 정의
|
||||||
++wNumHillType;
|
++wNumHillType;
|
||||||
else // 그 이상은 plain 타입
|
else // 그 이상은 plain 타입
|
||||||
++wNumPlainType;
|
++wNumPlainType;
|
||||||
|
|
||||||
if (kPosition.z > fMaxZ)
|
if (kPosition.z > fMaxZ)
|
||||||
|
@ -83,8 +83,8 @@ void CFlyTrace::Update()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//1. 알파를 쓰려면 색깔만 줄수있다.
|
//1. 알파를 쓰려면 색깔만 줄수있다.
|
||||||
//2. 텍스쳐를 쓰려면 알파 없다-_-
|
//2. 텍스쳐를 쓰려면 알파 없다-_-
|
||||||
|
|
||||||
|
|
||||||
struct TFlyVertex
|
struct TFlyVertex
|
||||||
|
@ -111,7 +111,7 @@ void CFlyingInstance::__SetTargetDirection(const CFlyTarget& c_rkTarget)
|
|||||||
{
|
{
|
||||||
D3DXVECTOR3 v3TargetPos=c_rkTarget.GetFlyTargetPosition();
|
D3DXVECTOR3 v3TargetPos=c_rkTarget.GetFlyTargetPosition();
|
||||||
|
|
||||||
// 임시 코드
|
// 임시 코드
|
||||||
if (m_pData->m_bMaintainParallel)
|
if (m_pData->m_bMaintainParallel)
|
||||||
{
|
{
|
||||||
v3TargetPos.z += 50.0f;
|
v3TargetPos.z += 50.0f;
|
||||||
@ -131,7 +131,7 @@ void CFlyingInstance::__SetTargetNormalizedDirection(const D3DXVECTOR3 & v3Nomal
|
|||||||
Vec3TransformQuaternion(&m_v3Accel, &m_pData->m_v3Accel, &m_qRot);
|
Vec3TransformQuaternion(&m_v3Accel, &m_pData->m_v3Accel, &m_qRot);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2004. 3. 26. myevan. 기능을 몰라 일단 주석 처리. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자
|
// 2004. 3. 26. myevan. 기능을 몰라 일단 주석 처리. 적절한 네이밍이 필요. 게임에서 사용하지 않는다면 툴에서 툴 전용으로 상속받아 만들도록 하자
|
||||||
void CFlyingInstance::SetFlyTarget(const CFlyTarget & cr_Target)
|
void CFlyingInstance::SetFlyTarget(const CFlyTarget & cr_Target)
|
||||||
{
|
{
|
||||||
//m_pFlyTarget = pTarget;
|
//m_pFlyTarget = pTarget;
|
||||||
@ -462,7 +462,7 @@ bool CFlyingInstance::Update()
|
|||||||
|
|
||||||
if (m_pData->m_bHitOnBackground)
|
if (m_pData->m_bHitOnBackground)
|
||||||
{
|
{
|
||||||
// 지형 충돌
|
// 지형 충돌
|
||||||
|
|
||||||
if (CFlyingManager::Instance().GetMapManagerPtr())
|
if (CFlyingManager::Instance().GetMapManagerPtr())
|
||||||
{
|
{
|
||||||
@ -477,7 +477,7 @@ bool CFlyingInstance::Update()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 건물+나무 충돌
|
// 건물+나무 충돌
|
||||||
|
|
||||||
FCheckBackgroundDuringFlying kCheckBackgroundDuringFlying(v3LastPosition,m_v3Position);
|
FCheckBackgroundDuringFlying kCheckBackgroundDuringFlying(v3LastPosition,m_v3Position);
|
||||||
rkCullingMgr.ForInRange(vecStart,fCollisionSphereRadius, &kCheckBackgroundDuringFlying);
|
rkCullingMgr.ForInRange(vecStart,fCollisionSphereRadius, &kCheckBackgroundDuringFlying);
|
||||||
|
@ -82,8 +82,8 @@ BOOL NRaceData::LoadMotionAttackData(CTextFileLoader & rTextFileLoader, TMotionA
|
|||||||
if (!LoadAttackData(rTextFileLoader, pData))
|
if (!LoadAttackData(rTextFileLoader, pData))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// NOTE : 기존의 AttackingType이 MotionType으로 바뀌었음
|
// NOTE : 기존의 AttackingType이 MotionType으로 바뀌었음
|
||||||
// 기존 데이타의 경우 없으면 기존 것으로 읽게끔..
|
// 기존 데이타의 경우 없으면 기존 것으로 읽게끔..
|
||||||
if (!rTextFileLoader.GetTokenInteger("motiontype", &pData->iMotionType))
|
if (!rTextFileLoader.GetTokenInteger("motiontype", &pData->iMotionType))
|
||||||
{
|
{
|
||||||
if (!rTextFileLoader.GetTokenInteger("attackingtype", &pData->iMotionType))
|
if (!rTextFileLoader.GetTokenInteger("attackingtype", &pData->iMotionType))
|
||||||
|
@ -98,7 +98,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance &
|
|||||||
float ta = D3DXVec3Dot(&p,&da)/la/la;
|
float ta = D3DXVec3Dot(&p,&da)/la/la;
|
||||||
float tb = D3DXVec3Dot(&p,&db)/lb/lb;
|
float tb = D3DXVec3Dot(&p,&db)/lb/lb;
|
||||||
|
|
||||||
// FIXME 구 체크가 아니다
|
// FIXME 구 체크가 아니다
|
||||||
|
|
||||||
if (ta<0)
|
if (ta<0)
|
||||||
return false;
|
return false;
|
||||||
@ -146,7 +146,7 @@ bool DetectCollisionDynamicSphereVSDynamicSphere(const CDynamicSphereInstance &
|
|||||||
//*/
|
//*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// NOTE : AABB 체크 할 것
|
// NOTE : AABB 체크 할 것
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
D3DXVECTOR3 v3Distance = c_rSphere1.v3Position - c_rSphere2.v3Position;
|
D3DXVECTOR3 v3Distance = c_rSphere1.v3Position - c_rSphere2.v3Position;
|
||||||
float fDistance = D3DXVec3Length(&v3Distance);
|
float fDistance = D3DXVec3Length(&v3Distance);
|
||||||
@ -273,15 +273,15 @@ bool DetectCollisionStaticSphereVSStaticCylinder(const TSphereData & c_rSphere,
|
|||||||
|
|
||||||
bool IsCWAcuteAngle(float begin, float end)
|
bool IsCWAcuteAngle(float begin, float end)
|
||||||
{
|
{
|
||||||
// 360 - src + dest // 시계 반대 방향
|
// 360 - src + dest // 시계 반대 방향
|
||||||
// src - dest // 시계 방향
|
// src - dest // 시계 방향
|
||||||
return ((360.0f - begin + end) > (begin - end));
|
return ((360.0f - begin + end) > (begin - end));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsCCWAcuteAngle(float begin, float end)
|
bool IsCCWAcuteAngle(float begin, float end)
|
||||||
{
|
{
|
||||||
// abs(360 - dest + src) // 시계 방향
|
// abs(360 - dest + src) // 시계 방향
|
||||||
// dest - src // 시계 반대 방향
|
// dest - src // 시계 반대 방향
|
||||||
int fValue = abs((int) (360.0f - end + begin));
|
int fValue = abs((int) (360.0f - end + begin));
|
||||||
return fValue >= (end - begin) ? true : false;
|
return fValue >= (end - begin) ? true : false;
|
||||||
}
|
}
|
||||||
@ -297,7 +297,7 @@ bool IsCCWRotation(float begin, float end)
|
|||||||
// 270 90
|
// 270 90
|
||||||
// 0
|
// 0
|
||||||
//
|
//
|
||||||
// 시계 반대
|
// 시계 반대
|
||||||
return (begin - end < 0);
|
return (begin - end < 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ BOOL CItemData::LoadItemData(const char * c_szFileName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Attaching Data
|
// Attaching Data
|
||||||
// Item 에 Attaching Data 일단 없음.
|
// Item 에 Attaching Data 일단 없음.
|
||||||
// if (TextFileLoader.SetChildNode("attachingdata"))
|
// if (TextFileLoader.SetChildNode("attachingdata"))
|
||||||
// {
|
// {
|
||||||
// if (!NRaceData::LoadAttachingData(TextFileLoader, &m_AttachingDataVector))
|
// if (!NRaceData::LoadAttachingData(TextFileLoader, &m_AttachingDataVector))
|
||||||
@ -389,10 +389,10 @@ long CItemData::GetSocket(BYTE byIndex) const
|
|||||||
return m_ItemTable.alSockets[byIndex];
|
return m_ItemTable.alSockets[byIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
//서버와 동일 서버 함수 변경시 같이 변경!!(이후에 합친다)
|
//서버와 동일 서버 함수 변경시 같이 변경!!(이후에 합친다)
|
||||||
//SocketCount = 1 이면 초급무기
|
//SocketCount = 1 이면 초급무기
|
||||||
//SocketCount = 2 이면 중급무기
|
//SocketCount = 2 이면 중급무기
|
||||||
//SocketCount = 3 이면 고급무기
|
//SocketCount = 3 이면 고급무기
|
||||||
int CItemData::GetSocketCount() const
|
int CItemData::GetSocketCount() const
|
||||||
{
|
{
|
||||||
return m_ItemTable.bGainSocketPct;
|
return m_ItemTable.bGainSocketPct;
|
||||||
@ -417,7 +417,7 @@ float CItemData::GetSpecularPowerf() const
|
|||||||
return float(uSpecularPower) / 100.0f;
|
return float(uSpecularPower) / 100.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
//refine 값은 아이템번호 끝자리와 일치한다-_-(테이블이용으로 바꿀 예정)
|
//refine 값은 아이템번호 끝자리와 일치한다-_-(테이블이용으로 바꿀 예정)
|
||||||
UINT CItemData::GetRefine() const
|
UINT CItemData::GetRefine() const
|
||||||
{
|
{
|
||||||
return GetIndex()%10;
|
return GetIndex()%10;
|
||||||
|
@ -73,9 +73,9 @@ bool CMapBase::LoadProperty()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: 이미 존재하는 맵 데이터와 동일한 데이터를 사용하는 맵을 새로 추가할 때, 맵 배포 용량을 줄이기 위한 작업.
|
// NOTE: 이미 존재하는 맵 데이터와 동일한 데이터를 사용하는 맵을 새로 추가할 때, 맵 배포 용량을 줄이기 위한 작업.
|
||||||
// MapProperty.txt 파일에 ParentMapName 값이 설정되어 있다면, 실제 모든 데이터는 ParentMap에서 읽어온다.
|
// MapProperty.txt 파일에 ParentMapName 값이 설정되어 있다면, 실제 모든 데이터는 ParentMap에서 읽어온다.
|
||||||
// 데이터의 부분공유(부분 오버라이트?) 기능은 필요 없대서, Parent Map에서 모든 데이터를 읽어옴.
|
// 데이터의 부분공유(부분 오버라이트?) 기능은 필요 없대서, Parent Map에서 모든 데이터를 읽어옴.
|
||||||
if (stTokenVectorMap.end() != stTokenVectorMap.find("parentmapname"))
|
if (stTokenVectorMap.end() != stTokenVectorMap.find("parentmapname"))
|
||||||
{
|
{
|
||||||
m_strParentMapName = stTokenVectorMap["parentmapname"][0];
|
m_strParentMapName = stTokenVectorMap["parentmapname"][0];
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "PropertyLoader.h"
|
#include "PropertyLoader.h"
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// 기본 함수
|
// 기본 함수
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool CMapManager::IsMapOutdoor()
|
bool CMapManager::IsMapOutdoor()
|
||||||
|
@ -226,8 +226,8 @@ bool CMapOutdoor::Destroy()
|
|||||||
void CMapOutdoor::Clear()
|
void CMapOutdoor::Clear()
|
||||||
{
|
{
|
||||||
UnloadWaterTexture();
|
UnloadWaterTexture();
|
||||||
Destroy(); // 해제
|
Destroy(); // 해제
|
||||||
Initialize(); // 초기화
|
Initialize(); // 초기화
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CMapOutdoor::SetTerrainCount(short sTerrainCountX, short sTerrainCountY)
|
bool CMapOutdoor::SetTerrainCount(short sTerrainCountX, short sTerrainCountY)
|
||||||
|
@ -15,7 +15,7 @@ bool CMapOutdoor::Load(float x, float y, float z)
|
|||||||
{
|
{
|
||||||
static std::string s_strOldPathName="";
|
static std::string s_strOldPathName="";
|
||||||
|
|
||||||
// 2004.08.09.myevan.Pack파일을 찾을때.. 폴더명만으로는 그냥 리턴되는 부분이 있다
|
// 2004.08.09.myevan.Pack파일을 찾을때.. 폴더명만으로는 그냥 리턴되는 부분이 있다
|
||||||
std::string c_rstrNewPathName=GetName()+"\\cache";
|
std::string c_rstrNewPathName=GetName()+"\\cache";
|
||||||
|
|
||||||
s_strOldPathName=c_rstrNewPathName;
|
s_strOldPathName=c_rstrNewPathName;
|
||||||
@ -36,7 +36,7 @@ bool CMapOutdoor::Load(float x, float y, float z)
|
|||||||
|
|
||||||
m_lOldReadX = -1;
|
m_lOldReadX = -1;
|
||||||
|
|
||||||
// TODO: SetRenderingDevice에서 Environment로 부터 라이트 속성을 넘겨줘야 스태틱 라이트가 제대로 작동한다.
|
// TODO: SetRenderingDevice에서 Environment로 부터 라이트 속성을 넘겨줘야 스태틱 라이트가 제대로 작동한다.
|
||||||
CSpeedTreeDirectX::Instance().SetRenderingDevice();
|
CSpeedTreeDirectX::Instance().SetRenderingDevice();
|
||||||
|
|
||||||
Update(x, y, z);
|
Update(x, y, z);
|
||||||
@ -100,13 +100,13 @@ bool CMapOutdoor::isAreaLoaded(WORD wX, WORD wY)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 현재 좌표를 기반으로 주위(ex. 3x3)에 있는 Terrain과 Area포인터를
|
// 현재 좌표를 기반으로 주위(ex. 3x3)에 있는 Terrain과 Area포인터를
|
||||||
// m_pTerrain과 m_pArea에 연결한다.
|
// m_pTerrain과 m_pArea에 연결한다.
|
||||||
void CMapOutdoor::AssignTerrainPtr()
|
void CMapOutdoor::AssignTerrainPtr()
|
||||||
{
|
{
|
||||||
// 월드에디터에서 화면을 죽죽죽 넘길 때 터레인을 저장해야 하기
|
// 월드에디터에서 화면을 죽죽죽 넘길 때 터레인을 저장해야 하기
|
||||||
// 때문에 이 virtual method를 호출 한다. 이 메소드는 CMapOutDoor에서는 아무 행동도
|
// 때문에 이 virtual method를 호출 한다. 이 메소드는 CMapOutDoor에서는 아무 행동도
|
||||||
// 하지 않는다.
|
// 하지 않는다.
|
||||||
OnPreAssignTerrainPtr();
|
OnPreAssignTerrainPtr();
|
||||||
|
|
||||||
short sReferenceCoordMinX, sReferenceCoordMaxX, sReferenceCoordMinY, sReferenceCoordMaxY;
|
short sReferenceCoordMinX, sReferenceCoordMaxX, sReferenceCoordMinY, sReferenceCoordMaxY;
|
||||||
@ -390,14 +390,14 @@ bool CMapOutdoor::LoadSetting(const char * c_szFileName)
|
|||||||
|
|
||||||
std::string stTextureSetFileName = strTextureSet;
|
std::string stTextureSetFileName = strTextureSet;
|
||||||
|
|
||||||
// TextureSet 이 이미 붙어 있을 경우 안붙인다.
|
// TextureSet 이 이미 붙어 있을 경우 안붙인다.
|
||||||
if (0 != stTextureSetFileName.find_first_of("textureset", 0))
|
if (0 != stTextureSetFileName.find_first_of("textureset", 0))
|
||||||
stTextureSetFileName = "textureset\\"+strTextureSet;
|
stTextureSetFileName = "textureset\\"+strTextureSet;
|
||||||
|
|
||||||
if (!m_TextureSet.Load(stTextureSetFileName.c_str(), m_fTerrainTexCoordBase))
|
if (!m_TextureSet.Load(stTextureSetFileName.c_str(), m_fTerrainTexCoordBase))
|
||||||
{
|
{
|
||||||
#ifdef WORLD_EDITOR
|
#ifdef WORLD_EDITOR
|
||||||
// TextureSet 이 적용되어 있지 않아도 진행
|
// TextureSet 이 적용되어 있지 않아도 진행
|
||||||
LogBox("TextureSet \xC0\xCC \xC0\xFB\xBF\xEB\xB5\xC7\xBE\xEE\xC0\xD6\xC1\xF6 \xBE\xCA\xC0\xBA \xB8\xCA \xC0\xD4\xB4\xCF\xB4\xD9.\n\xC1\xF6\xC7\xFC \xC5\xD8\xBD\xBA\xC3\xE7 \xC0\xDB\xBE\xF7\xBF\xA1 \xC1\xD6\xC0\xC7\xC7\xCF\xBD\xC3\xB1\xE2 \xB9\xD9\xB6\xF8\xB4\xCF\xB4\xD9.");
|
LogBox("TextureSet \xC0\xCC \xC0\xFB\xBF\xEB\xB5\xC7\xBE\xEE\xC0\xD6\xC1\xF6 \xBE\xCA\xC0\xBA \xB8\xCA \xC0\xD4\xB4\xCF\xB4\xD9.\n\xC1\xF6\xC7\xFC \xC5\xD8\xBD\xBA\xC3\xE7 \xC0\xDB\xBE\xF7\xBF\xA1 \xC1\xD6\xC0\xC7\xC7\xCF\xBD\xC3\xB1\xE2 \xB9\xD9\xB6\xF8\xB4\xCF\xB4\xD9.");
|
||||||
#else
|
#else
|
||||||
TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str());
|
TraceError("MapOutdoor::LoadSetting(c_szFileName=%s) - LOAD TEXTURE SET(%s) ERROR", c_szFileName, stTextureSetFileName.c_str());
|
||||||
|
@ -9,7 +9,7 @@ void CMapOutdoor::BuildQuadTree()
|
|||||||
{
|
{
|
||||||
FreeQuadTree();
|
FreeQuadTree();
|
||||||
|
|
||||||
// m_wPatchCount는 ConvertPatchSplat에서도 정한다, 안전을 위해 여기서 체크한다.
|
// m_wPatchCount는 ConvertPatchSplat에서도 정한다, 안전을 위해 여기서 체크한다.
|
||||||
if (0 == m_wPatchCount)
|
if (0 == m_wPatchCount)
|
||||||
{
|
{
|
||||||
TraceError("MapOutdoor::BuildQuadTree : m_wPatchCount is zero, you must call ConvertPatchSplat before call this method.");
|
TraceError("MapOutdoor::BuildQuadTree : m_wPatchCount is zero, you must call ConvertPatchSplat before call this method.");
|
||||||
|
@ -42,10 +42,10 @@ void CMapOutdoor::RenderTerrain()
|
|||||||
|
|
||||||
__RenderTerrain_RecurseRenderQuadTree(m_pRootNode);
|
__RenderTerrain_RecurseRenderQuadTree(m_pRootNode);
|
||||||
|
|
||||||
// 거리순 정렬
|
// 거리순 정렬
|
||||||
std::sort(m_PatchVector.begin(),m_PatchVector.end());
|
std::sort(m_PatchVector.begin(),m_PatchVector.end());
|
||||||
|
|
||||||
// 그리기 위한 벡터 세팅
|
// 그리기 위한 벡터 세팅
|
||||||
if (CTerrainPatch::SOFTWARE_TRANSFORM_PATCH_ENABLE)
|
if (CTerrainPatch::SOFTWARE_TRANSFORM_PATCH_ENABLE)
|
||||||
__RenderTerrain_RenderSoftwareTransformPatch();
|
__RenderTerrain_RenderSoftwareTransformPatch();
|
||||||
else
|
else
|
||||||
@ -133,13 +133,13 @@ void CMapOutdoor::ApplyLight(DWORD dwVersion, const D3DLIGHT9& c_rkLight)
|
|||||||
STATEMANAGER.SetLight(0, &c_rkLight);
|
STATEMANAGER.SetLight(0, &c_rkLight);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2004. 2. 17. myevan. 모든 부분을 보이게 초기화 한다
|
// 2004. 2. 17. myevan. 모든 부분을 보이게 초기화 한다
|
||||||
void CMapOutdoor::InitializeVisibleParts()
|
void CMapOutdoor::InitializeVisibleParts()
|
||||||
{
|
{
|
||||||
m_dwVisiblePartFlags=0xffffffff;
|
m_dwVisiblePartFlags=0xffffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2004. 2. 17. myevan. 특정 부분을 보이게 하거나 감추는 함수
|
// 2004. 2. 17. myevan. 특정 부분을 보이게 하거나 감추는 함수
|
||||||
void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible)
|
void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible)
|
||||||
{
|
{
|
||||||
DWORD dwMask=(1<<ePart);
|
DWORD dwMask=(1<<ePart);
|
||||||
@ -154,7 +154,7 @@ void CMapOutdoor::SetVisiblePart(int ePart, bool isVisible)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2004. 2. 17. myevan. 특정 부분이 보이는지 알아내는 함수
|
// 2004. 2. 17. myevan. 특정 부분이 보이는지 알아내는 함수
|
||||||
bool CMapOutdoor::IsVisiblePart(int ePart)
|
bool CMapOutdoor::IsVisiblePart(int ePart)
|
||||||
{
|
{
|
||||||
DWORD dwMask=(1<<ePart);
|
DWORD dwMask=(1<<ePart);
|
||||||
@ -164,7 +164,7 @@ bool CMapOutdoor::IsVisiblePart(int ePart)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Splat 개수 제한
|
// Splat 개수 제한
|
||||||
void CMapOutdoor::SetSplatLimit(int iSplatNum)
|
void CMapOutdoor::SetSplatLimit(int iSplatNum)
|
||||||
{
|
{
|
||||||
m_iSplatLimit = iSplatNum;
|
m_iSplatLimit = iSplatNum;
|
||||||
@ -353,7 +353,7 @@ struct CMapOutdoor_LessThingInstancePtrRenderOrder
|
|||||||
{
|
{
|
||||||
bool operator() (CGraphicThingInstance* pkLeft, CGraphicThingInstance* pkRight)
|
bool operator() (CGraphicThingInstance* pkLeft, CGraphicThingInstance* pkRight)
|
||||||
{
|
{
|
||||||
//TODO : Camera위치기반으로 소팅
|
//TODO : Camera위치기반으로 소팅
|
||||||
CCamera * pCurrentCamera = CCameraManager::Instance().GetCurrentCamera();
|
CCamera * pCurrentCamera = CCameraManager::Instance().GetCurrentCamera();
|
||||||
const D3DXVECTOR3 & c_rv3CameraPos = pCurrentCamera->GetEye();
|
const D3DXVECTOR3 & c_rv3CameraPos = pCurrentCamera->GetEye();
|
||||||
const D3DXVECTOR3 & c_v3LeftPos = pkLeft->GetPosition();
|
const D3DXVECTOR3 & c_v3LeftPos = pkLeft->GetPosition();
|
||||||
@ -387,7 +387,7 @@ void CMapOutdoor::RenderArea(bool bRenderAmbience)
|
|||||||
m_dwRenderedGraphicThingInstanceNum = 0;
|
m_dwRenderedGraphicThingInstanceNum = 0;
|
||||||
m_dwRenderedCRCWithNumberVector.clear();
|
m_dwRenderedCRCWithNumberVector.clear();
|
||||||
|
|
||||||
// NOTE - 20041201.levites.던젼 그림자 추가
|
// NOTE - 20041201.levites.던젼 그림자 추가
|
||||||
for (int j = 0; j < AROUND_AREA_NUM; ++j)
|
for (int j = 0; j < AROUND_AREA_NUM; ++j)
|
||||||
{
|
{
|
||||||
CArea * pArea;
|
CArea * pArea;
|
||||||
|
@ -100,7 +100,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch()
|
|||||||
std::vector<std::pair<float ,long> >::iterator far_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_far);
|
std::vector<std::pair<float ,long> >::iterator far_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_far);
|
||||||
std::vector<std::pair<float ,long> >::iterator near_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_near);
|
std::vector<std::pair<float ,long> >::iterator near_it = std::upper_bound(m_PatchVector.begin(),m_PatchVector.end(),fog_near);
|
||||||
|
|
||||||
// NOTE: Word Editor 툴에서는 fog far보다 멀리있는 물체를 텍스쳐 없이 그리는 작업을 하지 않음
|
// NOTE: Word Editor 툴에서는 fog far보다 멀리있는 물체를 텍스쳐 없이 그리는 작업을 하지 않음
|
||||||
#ifdef WORLD_EDITOR
|
#ifdef WORLD_EDITOR
|
||||||
near_it = m_PatchVector.begin();
|
near_it = m_PatchVector.begin();
|
||||||
far_it = m_PatchVector.end();
|
far_it = m_PatchVector.end();
|
||||||
@ -119,7 +119,7 @@ void CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch()
|
|||||||
DWORD dwFogEnable = STATEMANAGER.GetRenderState(D3DRS_FOGENABLE);
|
DWORD dwFogEnable = STATEMANAGER.GetRenderState(D3DRS_FOGENABLE);
|
||||||
std::vector<std::pair<float, long> >::iterator it = m_PatchVector.begin();
|
std::vector<std::pair<float, long> >::iterator it = m_PatchVector.begin();
|
||||||
|
|
||||||
// NOTE: 맵툴에서는 view ~ fog near 사이의 지형을 fog disabled 상태로 그리는 작업을 하지 않음.
|
// NOTE: 맵툴에서는 view ~ fog near 사이의 지형을 fog disabled 상태로 그리는 작업을 하지 않음.
|
||||||
#ifndef WORLD_EDITOR
|
#ifndef WORLD_EDITOR
|
||||||
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
|
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
|
||||||
|
|
||||||
@ -379,7 +379,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 0번 텍스처
|
// 0번 텍스처
|
||||||
if ( 0 < rTerrainSplatPatch.PatchTileCount[sPatchNum][0] )
|
if ( 0 < rTerrainSplatPatch.PatchTileCount[sPatchNum][0] )
|
||||||
{
|
{
|
||||||
DWORD dwTextureFactorFor0Texture = STATEMANAGER.GetRenderState(D3DRS_TEXTUREFACTOR);
|
DWORD dwTextureFactorFor0Texture = STATEMANAGER.GetRenderState(D3DRS_TEXTUREFACTOR);
|
||||||
@ -602,7 +602,7 @@ void CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat(long patchnum, WORD
|
|||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 그림자
|
// 그림자
|
||||||
if (m_bDrawShadow)
|
if (m_bDrawShadow)
|
||||||
{
|
{
|
||||||
STATEMANAGER.SetRenderState(D3DRS_LIGHTING, TRUE);
|
STATEMANAGER.SetRenderState(D3DRS_LIGHTING, TRUE);
|
||||||
|
@ -221,7 +221,7 @@ void CMapOutdoor::__SoftwareTransformPatch_RenderPatchSplat(SoftwareTransformPat
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 그림자
|
// 그림자
|
||||||
if (m_bDrawShadow)
|
if (m_bDrawShadow)
|
||||||
{
|
{
|
||||||
__SoftwareTransformPatch_SetShadowStream(akTransVertex);
|
__SoftwareTransformPatch_SetShadowStream(akTransVertex);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "TerrainQuadtree.h"
|
#include "TerrainQuadtree.h"
|
||||||
#include "ActorInstance.h"
|
#include "ActorInstance.h"
|
||||||
|
|
||||||
// 2004.08.17.myevan.std::vector 를 사용할 경우 메모리 접근에 오래걸려 스택쪽으로 계산하도록 수정
|
// 2004.08.17.myevan.std::vector 를 사용할 경우 메모리 접근에 오래걸려 스택쪽으로 계산하도록 수정
|
||||||
class PCBlocker_CDynamicSphereInstanceVector
|
class PCBlocker_CDynamicSphereInstanceVector
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -239,7 +239,7 @@ void CMapOutdoor::__Game_UpdateArea(D3DXVECTOR3& v3Player)
|
|||||||
D3DXVECTOR3 v3Target = pCamera->GetTarget();
|
D3DXVECTOR3 v3Target = pCamera->GetTarget();
|
||||||
D3DXVECTOR3 v3Eye= pCamera->GetEye();
|
D3DXVECTOR3 v3Eye= pCamera->GetEye();
|
||||||
|
|
||||||
D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // 빛의 방향
|
D3DXVECTOR3 v3Light = D3DXVECTOR3(1.732f, 1.0f, -3.464f); // 빛의 방향
|
||||||
v3Light *= 50.0f / D3DXVec3Length(&v3Light);
|
v3Light *= 50.0f / D3DXVec3Length(&v3Light);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -69,14 +69,14 @@ void CMapOutdoor::RenderWater()
|
|||||||
// RenderState
|
// RenderState
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// 물 위 아래 애니시키기...
|
// 물 위 아래 애니시키기...
|
||||||
static float s_fWaterHeightCurrent = 0;
|
static float s_fWaterHeightCurrent = 0;
|
||||||
static float s_fWaterHeightBegin = 0;
|
static float s_fWaterHeightBegin = 0;
|
||||||
static float s_fWaterHeightEnd = 0;
|
static float s_fWaterHeightEnd = 0;
|
||||||
static DWORD s_dwLastHeightChangeTime = CTimer::Instance().GetCurrentMillisecond();
|
static DWORD s_dwLastHeightChangeTime = CTimer::Instance().GetCurrentMillisecond();
|
||||||
static DWORD s_dwBlendtime = 300;
|
static DWORD s_dwBlendtime = 300;
|
||||||
|
|
||||||
// 1.5초 마다 변경
|
// 1.5초 마다 변경
|
||||||
if ((CTimer::Instance().GetCurrentMillisecond() - s_dwLastHeightChangeTime) > s_dwBlendtime)
|
if ((CTimer::Instance().GetCurrentMillisecond() - s_dwLastHeightChangeTime) > s_dwBlendtime)
|
||||||
{
|
{
|
||||||
s_dwBlendtime = random_range(1000, 3000);
|
s_dwBlendtime = random_range(1000, 3000);
|
||||||
@ -116,7 +116,7 @@ void CMapOutdoor::RenderWater()
|
|||||||
DrawWater(i->second);
|
DrawWater(i->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 렌더링 한 후에는 물 z 위치를 복구
|
// 렌더링 한 후에는 물 z 위치를 복구
|
||||||
m_matWorldForCommonUse._43 = 0.0f;
|
m_matWorldForCommonUse._43 = 0.0f;
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -61,7 +61,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition,
|
|||||||
m_v3Acceleration.y,
|
m_v3Acceleration.y,
|
||||||
m_v3Acceleration.z);
|
m_v3Acceleration.z);
|
||||||
*/
|
*/
|
||||||
// NOTE : 최종 위치를 구해둔다. 근데 100보다 크다면? ;
|
// NOTE : 최종 위치를 구해둔다. 근데 100보다 크다면? ;
|
||||||
const int LoopValue = 100;
|
const int LoopValue = 100;
|
||||||
D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f);
|
D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ void CPhysicsObject::IncreaseExternalForce(const D3DXVECTOR3 & c_rvBasePosition,
|
|||||||
|
|
||||||
//for (float fRatio = 0.0f; fRatio < 1.0f; fRatio += 0.1f)
|
//for (float fRatio = 0.0f; fRatio < 1.0f; fRatio += 0.1f)
|
||||||
//{
|
//{
|
||||||
// // 좀더 정밀하게 체크한다
|
// // 좀더 정밀하게 체크한다
|
||||||
// if (pWorld->isPhysicalCollision(c_rvBasePosition + v3Movement * fRatio))
|
// if (pWorld->isPhysicalCollision(c_rvBasePosition + v3Movement * fRatio))
|
||||||
// {
|
// {
|
||||||
// v3Movement = D3DXVECTOR3 (0.0f, 0.0f, 0.0f);
|
// v3Movement = D3DXVECTOR3 (0.0f, 0.0f, 0.0f);
|
||||||
@ -142,11 +142,11 @@ float CPhysicsObject::GetYMovement()
|
|||||||
|
|
||||||
bool CPhysicsObject::isBlending()
|
bool CPhysicsObject::isBlending()
|
||||||
{
|
{
|
||||||
// NOTE : IncreaseExternalForce() 에 의해 밀리는 처리중인가?
|
// NOTE : IncreaseExternalForce() 에 의해 밀리는 처리중인가?
|
||||||
if (0.0f != D3DXVec3Length(&m_v3Velocity))
|
if (0.0f != D3DXVec3Length(&m_v3Velocity))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// NOTE : SetLastPosition() 에 의해 밀리는 처리중인가?
|
// NOTE : SetLastPosition() 에 의해 밀리는 처리중인가?
|
||||||
if (m_xPushingPosition.isPlaying() ||
|
if (m_xPushingPosition.isPlaying() ||
|
||||||
m_yPushingPosition.isPlaying())
|
m_yPushingPosition.isPlaying())
|
||||||
return true;
|
return true;
|
||||||
|
@ -5,12 +5,12 @@
|
|||||||
#include "PropertyManager.h"
|
#include "PropertyManager.h"
|
||||||
#include "Property.h"
|
#include "Property.h"
|
||||||
/*
|
/*
|
||||||
* CProperty 파일 포맷
|
* CProperty 파일 포맷
|
||||||
*
|
*
|
||||||
* 0 ~ 4 bytes: fourcc
|
* 0 ~ 4 bytes: fourcc
|
||||||
* 5 ~ 6 bytes: \r\n
|
* 5 ~ 6 bytes: \r\n
|
||||||
*
|
*
|
||||||
* 그 이후의 바이트들은 텍스트 파일 로더와 같은 구조
|
* 그 이후의 바이트들은 텍스트 파일 로더와 같은 구조
|
||||||
*/
|
*/
|
||||||
CProperty::CProperty(const char * c_pszFileName) : mc_pFileName(NULL), m_dwCRC(0)
|
CProperty::CProperty(const char * c_pszFileName) : mc_pFileName(NULL), m_dwCRC(0)
|
||||||
{
|
{
|
||||||
@ -68,9 +68,9 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector)
|
|||||||
if (m_stTokenMap.end() == it)
|
if (m_stTokenMap.end() == it)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// NOTE : 튕김 현상 발견
|
// NOTE : 튕김 현상 발견
|
||||||
// std::copy(rTokenVector.begin(), it->second.begin(), it->second.end());
|
// std::copy(rTokenVector.begin(), it->second.begin(), it->second.end());
|
||||||
// NOTE : 레퍼런스에는 이런 식으로 하게끔 되어 있음
|
// NOTE : 레퍼런스에는 이런 식으로 하게끔 되어 있음
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// template <class InputIterator, class OutputIterator>
|
// template <class InputIterator, class OutputIterator>
|
||||||
// OutputIterator copy(InputIterator first, InputIterator last,
|
// OutputIterator copy(InputIterator first, InputIterator last,
|
||||||
@ -82,11 +82,11 @@ bool CProperty::GetVector(const char * c_pszKey, CTokenVector & rTokenVector)
|
|||||||
// copy(V.begin(), V.end(), L.begin());
|
// copy(V.begin(), V.end(), L.begin());
|
||||||
// assert(equal(V.begin(), V.end(), L.begin()));
|
// assert(equal(V.begin(), V.end(), L.begin()));
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// 헌데 그래도 튕김. - [levites]
|
// 헌데 그래도 튕김. - [levites]
|
||||||
// std::copy(it->second.begin(), it->second.end(), rTokenVector.begin());
|
// std::copy(it->second.begin(), it->second.end(), rTokenVector.begin());
|
||||||
|
|
||||||
// 결국 이렇게.. - [levites]
|
// 결국 이렇게.. - [levites]
|
||||||
// 현재 사용하는 곳 : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp
|
// 현재 사용하는 곳 : WorldEditor/Dialog/MapObjectPropertyPageBuilding.cpp
|
||||||
CTokenVector & rSourceTokenVector = it->second;
|
CTokenVector & rSourceTokenVector = it->second;
|
||||||
CTokenVector::iterator itor = rSourceTokenVector.begin();
|
CTokenVector::iterator itor = rSourceTokenVector.begin();
|
||||||
for (; itor != rSourceTokenVector.end(); ++itor)
|
for (; itor != rSourceTokenVector.end(); ++itor)
|
||||||
@ -102,7 +102,7 @@ void CProperty::PutString(const char * c_pszKey, const char * c_pszString)
|
|||||||
std::string stTempKey = c_pszKey;
|
std::string stTempKey = c_pszKey;
|
||||||
stl_lowers(stTempKey);
|
stl_lowers(stTempKey);
|
||||||
|
|
||||||
// 이미 있는걸 지움
|
// 이미 있는걸 지움
|
||||||
CTokenVectorMap::iterator itor = m_stTokenMap.find(stTempKey);
|
CTokenVectorMap::iterator itor = m_stTokenMap.find(stTempKey);
|
||||||
|
|
||||||
if (itor != m_stTokenMap.end())
|
if (itor != m_stTokenMap.end())
|
||||||
|
@ -33,10 +33,10 @@ DWORD CPropertyLoader::RegisterFile(const char * c_szPathName, const char * c_sz
|
|||||||
stl_lowers(stExt);
|
stl_lowers(stExt);
|
||||||
stl_lowers(strFileName);
|
stl_lowers(strFileName);
|
||||||
|
|
||||||
// 패스를 소문자로 만들고 \\ 는 / 로 바꾼다.
|
// 패스를 소문자로 만들고 \\ 는 / 로 바꾼다.
|
||||||
StringPath(strFileName);
|
StringPath(strFileName);
|
||||||
|
|
||||||
// 예약된 CRC 처리 (지워진 CRC)
|
// 예약된 CRC 처리 (지워진 CRC)
|
||||||
if (0 == strFileName.compare("property/reserve"))
|
if (0 == strFileName.compare("property/reserve"))
|
||||||
{
|
{
|
||||||
m_pPropertyManager->LoadReservedCRC(strFileName.c_str());
|
m_pPropertyManager->LoadReservedCRC(strFileName.c_str());
|
||||||
|
@ -53,8 +53,8 @@ bool CPropertyManager::Initialize(const char * c_pszPackFileName)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_isFileMode = true;
|
m_isFileMode = true;
|
||||||
// NOTE : 여기서 Property를 등록시키면 WorldEditor에서 이상이 생김 ;
|
// NOTE : 여기서 Property를 등록시키면 WorldEditor에서 이상이 생김 ;
|
||||||
// 또한, Property Tree List에도 등록을 시켜야 되기 때문에 바깥쪽에서.. - [levites]
|
// 또한, Property Tree List에도 등록을 시켜야 되기 때문에 바깥쪽에서.. - [levites]
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -193,7 +193,7 @@ bool CPropertyManager::Put(const char * c_pszFileName, const char * c_pszSourceF
|
|||||||
if (!CopyFile(c_pszSourceFileName, c_pszFileName, FALSE))
|
if (!CopyFile(c_pszSourceFileName, c_pszFileName, FALSE))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!m_isFileMode) // 팩 파일에도 넣음
|
if (!m_isFileMode) // 팩 파일에도 넣음
|
||||||
{
|
{
|
||||||
if (!m_pack.Put(c_pszFileName, NULL, COMPRESSED_TYPE_NONE,""))
|
if (!m_pack.Put(c_pszFileName, NULL, COMPRESSED_TYPE_NONE,""))
|
||||||
{
|
{
|
||||||
@ -219,7 +219,7 @@ bool CPropertyManager::Erase(DWORD dwCRC)
|
|||||||
DeleteFile(pProperty->GetFileName());
|
DeleteFile(pProperty->GetFileName());
|
||||||
ReserveCRC(pProperty->GetCRC());
|
ReserveCRC(pProperty->GetCRC());
|
||||||
|
|
||||||
if (!m_isFileMode) // 파일 모드가 아니면 팩에서도 지움
|
if (!m_isFileMode) // 파일 모드가 아니면 팩에서도 지움
|
||||||
m_pack.Delete(pProperty->GetFileName());
|
m_pack.Delete(pProperty->GetFileName());
|
||||||
|
|
||||||
FILE * fp = fopen("property/reserve", "a+");
|
FILE * fp = fopen("property/reserve", "a+");
|
||||||
|
@ -323,17 +323,17 @@ CGraphicThing* CRaceData::RegisterMotionData(WORD wMotionMode, WORD wMotionIndex
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2004. 3. 15. myevan. 원래는 모션내 인덱스 정보가 있어야 한다.
|
// 2004. 3. 15. myevan. 원래는 모션내 인덱스 정보가 있어야 한다.
|
||||||
pRaceMotionData->SetName(wMotionIndex);
|
pRaceMotionData->SetName(wMotionIndex);
|
||||||
|
|
||||||
/////
|
/////
|
||||||
|
|
||||||
// FIXME : 이미 GR2가 로드 되어 있을 경우에는 어떻게 해야 하는가?
|
// FIXME : 이미 GR2가 로드 되어 있을 경우에는 어떻게 해야 하는가?
|
||||||
// 현재는 똑같은 것이 하나 더 추가 되어 버린다. - [levites]
|
// 현재는 똑같은 것이 하나 더 추가 되어 버린다. - [levites]
|
||||||
|
|
||||||
return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage);
|
return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage);
|
||||||
|
|
||||||
// 2004.09.03.myevan.새로운함수로 대처
|
// 2004.09.03.myevan.새로운함수로 대처
|
||||||
//TMotion Motion;
|
//TMotion Motion;
|
||||||
//Motion.byPercentage = byPercentage;
|
//Motion.byPercentage = byPercentage;
|
||||||
//Motion.pMotion = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pRaceMotionData->GetMotionFileName());
|
//Motion.pMotion = (CGraphicThing *)CResourceManager::Instance().GetResourcePointer(pRaceMotionData->GetMotionFileName());
|
||||||
|
@ -73,7 +73,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
// Temporary - 이벤트를 위한 임시 기능
|
// Temporary - 이벤트를 위한 임시 기능
|
||||||
TextFileLoader.GetTokenString("specialpath", &strPathName);
|
TextFileLoader.GetTokenString("specialpath", &strPathName);
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ BOOL CRaceData::LoadRaceData(const char * c_szFileName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
// Temporary - 이벤트를 위한 임시 기능
|
// Temporary - 이벤트를 위한 임시 기능
|
||||||
TextFileLoader.GetTokenString("specialpath", &strPathName);
|
TextFileLoader.GetTokenString("specialpath", &strPathName);
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ void __GetRaceResourcePathes(unsigned race, std::vector <std::string>& vec_stPat
|
|||||||
vec_stPathes.push_back ("d:/ymir work/guild/");
|
vec_stPathes.push_back ("d:/ymir work/guild/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 만우절 이벤트용 예외 몬스터
|
// 만우절 이벤트용 예외 몬스터
|
||||||
else if (8507 == race || 8510 == race)
|
else if (8507 == race || 8510 == race)
|
||||||
{
|
{
|
||||||
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
vec_stPathes.push_back ("d:/ymir work/monster2/");
|
||||||
@ -273,8 +273,8 @@ bool CRaceManager::__LoadRaceMotionList(CRaceData& rkRaceData, const char* pathN
|
|||||||
|
|
||||||
if (s_kMap_stType_dwIndex.end() == fTypeIndex)
|
if (s_kMap_stType_dwIndex.end() == fTypeIndex)
|
||||||
{
|
{
|
||||||
// 모션 목록에 WAIT, WAIT4, WAIT20 이런 식으로 등록되어 있을 때,
|
// 모션 목록에 WAIT, WAIT4, WAIT20 이런 식으로 등록되어 있을 때,
|
||||||
// WAIT4, WAIT20을 WAIT로 인식할 수 있도록 처리
|
// WAIT4, WAIT20을 WAIT로 인식할 수 있도록 처리
|
||||||
const size_t c_cutLengthLimit = 2;
|
const size_t c_cutLengthLimit = 2;
|
||||||
bool bFound = false;
|
bool bFound = false;
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ void CSnowEnvironment::__ApplyBlur()
|
|||||||
// BlurVertex(D3DXVECTOR3(wTextureSize,0.0f,0.0f),1.0f, alphaColor, 1,0) ,
|
// BlurVertex(D3DXVECTOR3(wTextureSize,0.0f,0.0f),1.0f, alphaColor, 1,0) ,
|
||||||
// BlurVertex(D3DXVECTOR3(0.0f,wTextureSize,0.0f),1.0f, alphaColor, 0,1) ,
|
// BlurVertex(D3DXVECTOR3(0.0f,wTextureSize,0.0f),1.0f, alphaColor, 0,1) ,
|
||||||
// BlurVertex(D3DXVECTOR3(wTextureSize,wTextureSize,0.0f),1.0f, alphaColor, 1,1) };
|
// BlurVertex(D3DXVECTOR3(wTextureSize,wTextureSize,0.0f),1.0f, alphaColor, 1,1) };
|
||||||
// //누적 블러 텍스쳐를 찍는다.
|
// //누적 블러 텍스쳐를 찍는다.
|
||||||
// STATEMANAGER.SetTexture(0,m_lpAccumTexture);
|
// STATEMANAGER.SetTexture(0,m_lpAccumTexture);
|
||||||
// STATEMANAGER.SetVertexShader( D3DFVF_XYZRHW | D3DFVF_DIFFUSE|D3DFVF_TEX1 );
|
// STATEMANAGER.SetVertexShader( D3DFVF_XYZRHW | D3DFVF_DIFFUSE|D3DFVF_TEX1 );
|
||||||
// STATEMANAGER.DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,V,sizeof(BlurVertex));
|
// STATEMANAGER.DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,V,sizeof(BlurVertex));
|
||||||
|
@ -32,7 +32,7 @@ void CWeaponTrace::Update(float fReachScale)
|
|||||||
if (!m_pInstance)
|
if (!m_pInstance)
|
||||||
return;
|
return;
|
||||||
{
|
{
|
||||||
// 잔상을 남기는 시간 범위 내의 점들만 유지합니다.
|
// 잔상을 남기는 시간 범위 내의 점들만 유지합니다.
|
||||||
TTimePointList::iterator it;
|
TTimePointList::iterator it;
|
||||||
for(it=m_ShortTimePointList.begin();it!=m_ShortTimePointList.end();++it)
|
for(it=m_ShortTimePointList.begin();it!=m_ShortTimePointList.end();++it)
|
||||||
{
|
{
|
||||||
@ -69,7 +69,7 @@ void CWeaponTrace::Update(float fReachScale)
|
|||||||
mat._41 = pBoneMat->_41;
|
mat._41 = pBoneMat->_41;
|
||||||
mat._42 = pBoneMat->_42;
|
mat._42 = pBoneMat->_42;
|
||||||
mat._43 = pBoneMat->_43;
|
mat._43 = pBoneMat->_43;
|
||||||
// 현재 위치를 추가합니다.
|
// 현재 위치를 추가합니다.
|
||||||
D3DXMATRIX matPoint;
|
D3DXMATRIX matPoint;
|
||||||
D3DXMATRIX matTranslation;
|
D3DXMATRIX matTranslation;
|
||||||
D3DXMATRIX matRotation;
|
D3DXMATRIX matRotation;
|
||||||
|
@ -86,7 +86,7 @@ bool CSoundData::ReadFromDisk()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AILFILETYPE_ADPCM_WAV: // 3D 사운드는 decompress 해야 함.
|
case AILFILETYPE_ADPCM_WAV: // 3D 사운드는 decompress 해야 함.
|
||||||
{
|
{
|
||||||
AIL_WAV_info(s + 1, &info);
|
AIL_WAV_info(s + 1, &info);
|
||||||
AIL_decompress_ADPCM(&info, &m_data, &m_size);
|
AIL_decompress_ADPCM(&info, &m_data, &m_size);
|
||||||
|
@ -34,11 +34,11 @@ bool CSoundInstance2D::SetSound(CSoundData * pSoundData)
|
|||||||
{
|
{
|
||||||
assert(m_sample != NULL && pSoundData != NULL);
|
assert(m_sample != NULL && pSoundData != NULL);
|
||||||
|
|
||||||
// 레퍼런스 카운트가 1이 될 때 로드를 해야 제대로 사이즈가 리턴
|
// 레퍼런스 카운트가 1이 될 때 로드를 해야 제대로 사이즈가 리턴
|
||||||
// 되므로 반드시 Get을 호출 하고 진행해야 한다.
|
// 되므로 반드시 Get을 호출 하고 진행해야 한다.
|
||||||
// 또, m_pSoundData가 pSoundData와 같고 m_pSoundData의 레퍼런스
|
// 또, m_pSoundData가 pSoundData와 같고 m_pSoundData의 레퍼런스
|
||||||
// 카운터가 1일 경우, 불필요하게 로드가 일어나므로 미리 레퍼런스
|
// 카운터가 1일 경우, 불필요하게 로드가 일어나므로 미리 레퍼런스
|
||||||
// 카운터를 올려놔야 한다.
|
// 카운터를 올려놔야 한다.
|
||||||
LPVOID lpData = pSoundData->Get();
|
LPVOID lpData = pSoundData->Get();
|
||||||
|
|
||||||
AIL_init_sample(m_sample);
|
AIL_init_sample(m_sample);
|
||||||
|
@ -35,11 +35,11 @@ bool CSoundInstance3D::SetSound(CSoundData* pSoundData)
|
|||||||
{
|
{
|
||||||
assert(m_sample != NULL && pSoundData != NULL);
|
assert(m_sample != NULL && pSoundData != NULL);
|
||||||
|
|
||||||
// 레퍼런스 카운트가 1이 될 때 로드를 해야 제대로 사이즈가 리턴
|
// 레퍼런스 카운트가 1이 될 때 로드를 해야 제대로 사이즈가 리턴
|
||||||
// 되므로 반드시 Get을 호출 하고 진행해야 한다.
|
// 되므로 반드시 Get을 호출 하고 진행해야 한다.
|
||||||
// 또, m_pSoundData가 pSoundData와 같고 m_pSoundData의 레퍼런스
|
// 또, m_pSoundData가 pSoundData와 같고 m_pSoundData의 레퍼런스
|
||||||
// 카운터가 1일 경우, 불필요하게 로드가 일어나므로 미리 레퍼런스
|
// 카운터가 1일 경우, 불필요하게 로드가 일어나므로 미리 레퍼런스
|
||||||
// 카운터를 올려놔야 한다.
|
// 카운터를 올려놔야 한다.
|
||||||
LPVOID lpData = pSoundData->Get();
|
LPVOID lpData = pSoundData->Get();
|
||||||
|
|
||||||
if (m_pSoundData != NULL)
|
if (m_pSoundData != NULL)
|
||||||
@ -97,7 +97,7 @@ void CSoundInstance3D::Stop()
|
|||||||
{
|
{
|
||||||
AIL_end_3D_sample(m_sample);
|
AIL_end_3D_sample(m_sample);
|
||||||
// m_sample = NULL;
|
// m_sample = NULL;
|
||||||
// NOTE : IsDone을 체크하려면 m_sample이 살아있어야 합니다 - [levites]
|
// NOTE : IsDone을 체크하려면 m_sample이 살아있어야 합니다 - [levites]
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSoundInstance3D::GetVolume(float& rfVolume) const
|
void CSoundInstance3D::GetVolume(float& rfVolume) const
|
||||||
|
@ -381,7 +381,7 @@ void CSoundManager::PlayCharacterSound3D(float fx, float fy, float fz, const cha
|
|||||||
if (0.0f == GetSoundVolume())
|
if (0.0f == GetSoundVolume())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 어느 정도의 최적화가 필요할 수도 있다 - [levites]
|
// 어느 정도의 최적화가 필요할 수도 있다 - [levites]
|
||||||
if (bCheckFrequency)
|
if (bCheckFrequency)
|
||||||
{
|
{
|
||||||
static float s_fLimitDistance = 5000*5000;
|
static float s_fLimitDistance = 5000*5000;
|
||||||
@ -548,7 +548,7 @@ void CSoundManager::FadeOutAllMusic()
|
|||||||
|
|
||||||
void CSoundManager::SaveVolume()
|
void CSoundManager::SaveVolume()
|
||||||
{
|
{
|
||||||
// NOTE : 두번 이상 Save를 시도할때는 그냥 Return
|
// NOTE : 두번 이상 Save를 시도할때는 그냥 Return
|
||||||
if (m_isSoundDisable)
|
if (m_isSoundDisable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ int CSoundManager3D::SetInstance(const char * c_pszFileName)
|
|||||||
if (!pkInst->SetSound(pkSoundData))
|
if (!pkInst->SetSound(pkSoundData))
|
||||||
{
|
{
|
||||||
TraceError("CSoundManager3D::GetInstance (filename: %s)", c_pszFileName);
|
TraceError("CSoundManager3D::GetInstance (filename: %s)", c_pszFileName);
|
||||||
// NOTE : 사운드가 없을 경우 Failed to set. return NULL. - [levites]
|
// NOTE : 사운드가 없을 경우 Failed to set. return NULL. - [levites]
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ int CSoundManager3D::SetInstance(const char * c_pszFileName)
|
|||||||
|
|
||||||
++start;
|
++start;
|
||||||
|
|
||||||
// 설마 DWORD 한계값을 넘어갈리야 없겠지만.. 그래도.. 혹시나.. - [levites]
|
// 설마 DWORD 한계값을 넘어갈리야 없겠지만.. 그래도.. 혹시나.. - [levites]
|
||||||
if (start > 50000)
|
if (start > 50000)
|
||||||
{
|
{
|
||||||
start = 0;
|
start = 0;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user