Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
133 lines
2.7 KiB
C++
133 lines
2.7 KiB
C++
#ifndef BSPBASECLASS_H
|
|
#define BSPBASECLASS_H
|
|
#pragma once
|
|
|
|
#include <vector>
|
|
|
|
#include "3DMath.h"
|
|
#include "Vertex.h"
|
|
//#include "List.h"
|
|
#include "QShader.h"
|
|
class Plane
|
|
{
|
|
public:
|
|
vector3 m_vecPointOnPlane;
|
|
vector3 m_vecNormal;
|
|
};
|
|
|
|
class Poly
|
|
{
|
|
public:
|
|
LVertex *m_pVertexList;
|
|
vector3 m_vecNormal;
|
|
WORD m_nVertex;
|
|
WORD m_nIndices;
|
|
WORD *m_pIndices;
|
|
bool m_bBeenUsedAsSplitter;
|
|
DWORD m_TextureIndex;
|
|
|
|
Poly *m_pNext;
|
|
};
|
|
|
|
class Portal
|
|
{
|
|
public:
|
|
LVertex *m_pVertexList;
|
|
vector3 m_vecNormal;
|
|
WORD m_nVertex;
|
|
WORD m_nIndices;
|
|
WORD *m_pIndices;
|
|
BYTE m_nLeafs;
|
|
long m_LeafOwnerArray[4];
|
|
Portal *m_pPrev;
|
|
Portal *m_pNext;
|
|
};
|
|
|
|
class BoundingBox
|
|
{
|
|
public:
|
|
vector3 m_vecBoxMin;
|
|
vector3 m_vecBoxMax;
|
|
};
|
|
|
|
class Leaf
|
|
{
|
|
public:
|
|
long m_StartPolygon;
|
|
long m_EndPolygon;
|
|
long m_PortalIndexList[50];
|
|
long m_nPortals;
|
|
long m_PVSIndex;
|
|
BoundingBox m_BoundingBox;
|
|
};
|
|
|
|
class Node
|
|
{
|
|
public:
|
|
unsigned char m_bLeaf;
|
|
unsigned long m_Plane;
|
|
unsigned long m_Front;
|
|
signed long m_Back;
|
|
BoundingBox m_BoundingBox;
|
|
};
|
|
|
|
class ClipPlane
|
|
{
|
|
public:
|
|
WORD m_nPlane;
|
|
Plane *m_pPlane;
|
|
};
|
|
|
|
const int CP_FRONT=1001;
|
|
const int CP_BACK =1002;
|
|
const int CP_ONPLANE=1003;
|
|
const int CP_SPANNING=1004;
|
|
|
|
|
|
class BSPBaseData
|
|
{
|
|
public:
|
|
void Load(char *strFilename);
|
|
void Save(char *strFilename,std::vector<CQShader*> &ShaderList);
|
|
void SplitPortal(Portal *pPortal, Plane *pPlane, Portal *pFrontSplit, Portal *pBackSplit);
|
|
void CopyBspData(BSPBaseData *pData);
|
|
static Poly* AddPolygon(Poly* pParent,LVertex *Vertices,WORD nVertex);
|
|
static Poly* LoadMWM(char *strFilename);
|
|
void DeletePortal(Portal *pPortal);
|
|
void IncreaseNumberOfPortals();
|
|
void IncreaseNumberOfLeafs();
|
|
void IncreaseNumberOfPlanes();
|
|
void IncreaseNumberOfPolygons();
|
|
void IncreaseNumberOfNodes();
|
|
void DeletePolygon(Poly *pPoly);
|
|
void CalculateBox(BoundingBox *pBox,Poly *pPolyList);
|
|
bool GetIntersect (vector3 *vecLineStart,vector3 *vecLineEnd,vector3 *pVertex,vector3 *vecNormal,vector3 *vecIntersection,float *fPercentage);
|
|
ClassifyPoint(vector3 *vecPoint,Plane *pPlane);
|
|
void SplitPolygon(Poly *pPoly, Plane *pPlane, Poly *pFrontSplit, Poly *pBackSplit);
|
|
static int ClassifyPoly(Plane *pPlane,Poly *pPoly);
|
|
static void Create();
|
|
BSPBaseData();
|
|
static Node *m_pNodeArray;
|
|
static Poly *m_pPolygonArray;
|
|
static Leaf *m_pLeafArray;
|
|
static Plane *m_pPlaneArray;
|
|
static Portal **m_pPortalArray;
|
|
static BYTE *m_pPVSData;
|
|
static long m_nPolygons;
|
|
static long m_nNodes;
|
|
static long m_nLeafs;
|
|
static long m_nPlanes;
|
|
static long m_nPortals;
|
|
|
|
static long m_nMaxNodes;
|
|
static long m_nMaxPolygons;
|
|
static long m_nMaxPlanes;
|
|
static long m_nMaxLeafs;
|
|
static long m_nMaxPortals;
|
|
|
|
//static BYTE *m_pPVSData;
|
|
static long m_BytePerSet;
|
|
static long m_PVSCompressedSize;
|
|
};
|
|
|
|
#endif |