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