Initial commit: ROW Client source code

Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-29 16:24:34 +09:00
commit e067522598
5135 changed files with 1745744 additions and 0 deletions

View File

@@ -0,0 +1,157 @@
// ViewFrustum.cpp: implementation of the CViewFrustum class.
//
//////////////////////////////////////////////////////////////////////
#include "ViewFrustum.h"
#include "SceneManager.h"
#include "GMMemory.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CViewFrustum::CViewFrustum()
{
}
CViewFrustum::~CViewFrustum()
{
}
void CViewFrustum::Update() {
LPDIRECT3DDEVICE8 device;
D3DXMATRIX view;
D3DXMATRIX project;
D3DXMATRIX clip;
device = CSceneManager::GetDevice();
device->GetTransform(D3DTS_VIEW,&view);
device->GetTransform(D3DTS_PROJECTION,&project);
D3DXMatrixMultiply(&clip,&view,&project);
//left plane
m_Frustum[LEFT_P].a = clip._14 + clip._11;
m_Frustum[LEFT_P].b = clip._24 + clip._21;
m_Frustum[LEFT_P].c = clip._34 + clip._31;
m_Frustum[LEFT_P].d = clip._44 + clip._41;
//right plane
m_Frustum[RIGHT_P].a = clip._14 - clip._11;
m_Frustum[RIGHT_P].b = clip._24 - clip._21;
m_Frustum[RIGHT_P].c = clip._34 - clip._31;
m_Frustum[RIGHT_P].d = clip._44 - clip._41;
//top plane
m_Frustum[TOP_P].a = clip._14 - clip._12;
m_Frustum[TOP_P].b = clip._24 - clip._22;
m_Frustum[TOP_P].c = clip._34 - clip._32;
m_Frustum[TOP_P].d = clip._44 - clip._42;
//bottom plane
m_Frustum[BOTTOM_P].a = clip._14 + clip._12;
m_Frustum[BOTTOM_P].b = clip._24 + clip._22;
m_Frustum[BOTTOM_P].c = clip._34 + clip._32;
m_Frustum[BOTTOM_P].d = clip._44 + clip._42;
//near plane
m_Frustum[NEAR_P].a = clip._13;
m_Frustum[NEAR_P].b = clip._23;
m_Frustum[NEAR_P].c = clip._33;
m_Frustum[NEAR_P].d = clip._43;
//far plane
m_Frustum[FAR_P].a = clip._14 - clip._13;
m_Frustum[FAR_P].b = clip._24 - clip._23;
m_Frustum[FAR_P].c = clip._34 - clip._33;
m_Frustum[FAR_P].d = clip._44 - clip._43;
//normalize plane
for(int i=0;i<6;i++)
D3DXPlaneNormalize(&(m_Frustum[i]),&(m_Frustum[i]));
}
bool CViewFrustum::PointInFrustum(float x,float y,float z) {
for(int i=0;i<6;i++) {
float fvalue = m_Frustum[i].a * x + m_Frustum[i].b * y + m_Frustum[i].c * z + m_Frustum[i].d;
if(fvalue <= 0)
return false; //point not in frustum
}
// point in frustum
return true;
}
bool CViewFrustum::SphereInFrustum(float x,float y,float z,float rad){
for(int i=0;i<6;i++) {
float fvalue = m_Frustum[i].a * x + m_Frustum[i].b * y + m_Frustum[i].c * z + m_Frustum[i].d;
if(fvalue <= -rad)
return false; //Sphere not in frustum
}
// Sphere in frustum
return true;
}
bool CViewFrustum::BoxInFrustum(int *vecMin,int *vecMax) {
for(int i = 0; i < 6; i++ )
{
if(m_Frustum[i].a * vecMin[0] + m_Frustum[i].b * vecMin[1] + m_Frustum[i].c * vecMin[2] + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMax[0] + m_Frustum[i].b * vecMin[1] + m_Frustum[i].c * vecMin[2] + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMin[0] + m_Frustum[i].b * vecMax[1] + m_Frustum[i].c * vecMin[2] + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMax[0] + m_Frustum[i].b * vecMax[1] + m_Frustum[i].c * vecMin[2] + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMin[0] + m_Frustum[i].b * vecMin[1] + m_Frustum[i].c * vecMax[2] + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMax[0] + m_Frustum[i].b * vecMin[1] + m_Frustum[i].c * vecMax[2] + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMin[0] + m_Frustum[i].b * vecMax[1] + m_Frustum[i].c * vecMax[2] + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMax[0] + m_Frustum[i].b * vecMax[1] + m_Frustum[i].c * vecMax[2] + m_Frustum[i].d > 0) continue;
// If we get here, it isn't in the frustum
return false;
}
// Return a true for the box being inside of the frustum
return true;
}
bool CViewFrustum::BoxInFrustum(D3DXVECTOR3 vecMin,D3DXVECTOR3 vecMax) {
for(int i = 0; i < 6; i++ )
{
if(m_Frustum[i].a * vecMin.x + m_Frustum[i].b * vecMin.y + m_Frustum[i].c * vecMin.z + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMax.x + m_Frustum[i].b * vecMin.y + m_Frustum[i].c * vecMin.z + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMin.x + m_Frustum[i].b * vecMax.y + m_Frustum[i].c * vecMin.z + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMax.x + m_Frustum[i].b * vecMax.y + m_Frustum[i].c * vecMin.z + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMin.x + m_Frustum[i].b * vecMin.y + m_Frustum[i].c * vecMax.z + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMax.x + m_Frustum[i].b * vecMin.y + m_Frustum[i].c * vecMax.z + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMin.x + m_Frustum[i].b * vecMax.y + m_Frustum[i].c * vecMax.z + m_Frustum[i].d > 0) continue;
if(m_Frustum[i].a * vecMax.x + m_Frustum[i].b * vecMax.y + m_Frustum[i].c * vecMax.z + m_Frustum[i].d > 0) continue;
// If we get here, it isn't in the frustum
return false;
}
// Return a true for the box being inside of the frustum
return true;
}
bool CViewFrustum::BoxInFrustum(RCullingBox *BoundB) {
BYTE bOutside[8];
ZeroMemory( &bOutside, sizeof(bOutside) );
//bound box check in frustum
for( int iPoint = 0; iPoint < 8; iPoint++) {
for( int iPlane = 0; iPlane < 6; iPlane++) {
// bound box <20><><EFBFBD><EFBFBD> frustum plane <20>ܺο<DCBA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((m_Frustum[iPlane].a * (BoundB->m_WorldBound[iPoint].x) +
m_Frustum[iPlane].b * (BoundB->m_WorldBound[iPoint].y) +
m_Frustum[iPlane].c * (BoundB->m_WorldBound[iPoint].z) +
m_Frustum[iPlane].d) < 0) {
//<2F>ܺο<DCBA> <20><><EFBFBD><EFBFBD> <20>Ҷ<EFBFBD> 1 bit setting
bOutside[iPoint] |= (1 << iPlane);
}
}
// bound box inside frustum.
if( bOutside[iPoint] == 0 )
return true;
}
return false;
}