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,137 @@
/*
Collision detection + response <20><> ó<><C3B3><EFBFBD>ϴ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
<20><20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> culling <20><> octree <20><> <20>̿<EFBFBD>
collision detection <20><> response <20>˰<EFBFBD><CBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Kasper Fauerby <20><>
'Improved Collision detection and Response' <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ڵ<EFBFBD><DAB5>̴<EFBFBD>
*/
#pragma once
#include "./Vector3.h"
#include <vector>
// forward decl.
struct IDirect3DDevice8;
namespace CrossM{
namespace Scene{
struct CollisionTriangleInfo
{
Math::VECTOR3 m_avVertex[3];
// <20>ΰ<EFBFBD><CEB0><EFBFBD> <20><><EFBFBD><EFBFBD>..<2E≯<EFBFBD><CCB8>׸<EFBFBD> <20><> <20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> id <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>ҵ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ Ŭ<><C5AC><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>/<2F>Ͽ콺/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ)+<2B><> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƮID(<28><> <20>Ͽ콺<CFBF><ECBDBA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ)
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
Math::VECTOR3 m_vFaceNormal;
};
// octree <20><> node. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ϶<C6B4> <20>ٱ<EFBFBD> <20><><EFBFBD><20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
// <20>ٿ<EFBFBD><D9BF><EFBFBD> <20>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ԵǴ<D4B5> <20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFB0A2> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>ϵȴ<CFB5>.
// (<28><><EFBFBD><20><>ġ<EFBFBD><C4A1> <20><> <20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD>ϵ<EFBFBD>)
class COctreeCollisionNode
{
public:
COctreeCollisionNode();
~COctreeCollisionNode();
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void ReleaseSubNode();
// leaf node <20><><EFBFBD><EFBFBD> üũ
bool IsLeafNode();
// <20>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><20><><EFBFBD>Ե<EFBFBD> <20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>л<EFBFBD><D0BB><EFBFBD>Ų<EFBFBD><C5B2>.
// <20>ڱ<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD><E5BFA1> <20>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD> <20>Ѵ<EFBFBD>.
void BuildSubNode(
const std::vector< CollisionTriangleInfo >& vecTriangle,
const size_t nMaximumRecursion, const size_t nMinPolyCount,
size_t nCurrentRecursionLevel);
// <20><20><>ü<EFBFBD><C3BC> swept volume <20><> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> vecCollidableNode <20><> <20><><EFBFBD><EFBFBD>
void CollectCollidableNodes(
const Math::VECTOR3& vSweptVolumeMin, const Math::VECTOR3& vSweptVolumeMax,
std::vector< COctreeCollisionNode* >& vecCollidableNode);
Math::VECTOR3 m_vBoundingMin;
Math::VECTOR3 m_vBoundingMax;
std::vector< size_t > m_vecTriangleIndex;
COctreeCollisionNode* m_apSubNode[8];
};
class COctreeCollider
{
public:
COctreeCollider();
~COctreeCollider();
//////////////////////////////////////////////////////////////////////////
//
// Octree Build <20><><EFBFBD><EFBFBD> <20>޼ҵ<DEBC>
/*
<09><20><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
<09><20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD><D2B4>ǰ<EFBFBD>, octree <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD><C4B1>ȴ<EFBFBD>.
BuildOctree() <20><> ȣ<><C8A3><EFBFBD>DZ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> COctreeCollider <20><> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>
*/
void SetTriangleCount(unsigned int uiTriangleCount);
/*
<09><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><>ȯ.
<09><> <20>޼ҵ带 ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> <20><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ȱ<EFBFBD><C8B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, octree <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD><C4B1>ȴ<EFBFBD>.
BuildOctree() <20><> ȣ<><C8A3><EFBFBD>DZ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> COctreeCollider <20><> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>
*/
void GetTriangleDataPtr(CollisionTriangleInfo*& pTriangleData);
// <20><><EFBFBD>õ<EFBFBD> <20><EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ʷ<EFBFBD> octree <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool BuildOctree(const size_t nMaximumRecursion, const size_t nMinPolyCount);
//////////////////////////////////////////////////////////////////////////
//
// <20><EFBFBD><E6B5B9><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>޼ҵ<DEBC>
/*
<09>־<EFBFBD><D6BE><EFBFBD> Ÿ<><C5B8>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> <20><>ġ(prevPos)<29><> <20>̵<EFBFBD><CCB5><EFBFBD> <20><>ġ(nextPos) <20><> <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>ͷ<EFBFBD> <20>ѱ<EFBFBD><D1B1><EFBFBD>,
<09><EFBFBD><E6B5B9> üũ<C3BC>ϰ<EFBFBD> <20><EFBFBD><E6B5B9> <20>Ͼ<CFBE><EEB3B5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
*/
void GetCollisionRespondingPosition(
Math::VECTOR3& vRespondingPos,
const Math::VECTOR3& vPrevPos, const Math::VECTOR3& vNewPos,
const Math::VECTOR3& vEllipsoidRadius,
const unsigned int nRecursionLevel = 1);
// <20>׽<EFBFBD>Ʈ<EFBFBD><C6AE> <20>޼ҵ<DEBC>, <20><EFBFBD><E6B5B9> <20>Ͼ <20><> <20>ִ°<D6B4><C2B0><EFBFBD><EFBFBD><EFBFBD> Ȯ<>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFB0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void RenderCollidableNodeTriangles(IDirect3DDevice8* pDevice);
private:
std::vector< CollisionTriangleInfo > m_vecCollisionTriangle;
Math::VECTOR3 m_vCollisionBoundingMin;
Math::VECTOR3 m_vCollisionBoundingMax;
COctreeCollisionNode m_octreeRootNode;
// <20>ӽÿ<D3BD>, <20><EFBFBD><E6B5B9> <20>Ͼ <20><> <20>ִ°<D6B4><C2B0><EFBFBD><EFBFBD><EFBFBD> Ȯ<>ε<EFBFBD> leaf <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::vector< COctreeCollisionNode* > m_vecpCollidableNode;
// <20>ӽÿ<D3BD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::vector< Math::VECTOR3 > m_vecRenderVertex;
// <20>ӽÿ<D3BD>. <20><EFBFBD><E6B5B9> <20>Ͼ <20><EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
size_t m_nColTriIndex;
};
}}