110 lines
2.1 KiB
C++
110 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include <Orange/Core/Types.h>
|
|
|
|
namespace orange
|
|
{
|
|
class Quake2BSP
|
|
{
|
|
public:
|
|
Quake2BSP(const void* data, size_t size);
|
|
private:
|
|
static constexpr uint32_t LumpCount = 19;
|
|
static constexpr uint32_t MaxLightmapStyles = 4;
|
|
|
|
struct LumpType
|
|
{
|
|
enum
|
|
{
|
|
Entities,
|
|
Planes,
|
|
Vertices,
|
|
Visibility,
|
|
Nodes,
|
|
TextureInfo,
|
|
Faces,
|
|
Lightmaps,
|
|
Leaves,
|
|
LeafFaceTable,
|
|
LeafBrushTable,
|
|
Edges,
|
|
FaceEdgeTable,
|
|
Models,
|
|
Brushes,
|
|
BrushSides,
|
|
Pop,
|
|
Areas,
|
|
AreaPortals,
|
|
};
|
|
};
|
|
|
|
struct LumpPointer
|
|
{
|
|
uint32_t offset;
|
|
uint32_t length;
|
|
};
|
|
|
|
struct BSPHeader
|
|
{
|
|
uint32_t magic;
|
|
uint32_t version;
|
|
|
|
LumpPointer lumps[LumpCount];
|
|
};
|
|
|
|
struct BSPFace
|
|
{
|
|
uint16_t plane;
|
|
uint16_t planeSide;
|
|
|
|
uint32_t firstEdge;
|
|
uint16_t numEdges;
|
|
|
|
uint16_t textureInfoIdx;
|
|
|
|
uint8_t lightmapStyles[MaxLightmapStyles];
|
|
uint32_t lightmapOffset;
|
|
};
|
|
|
|
struct BSPPlane
|
|
{
|
|
float normal[3];
|
|
float distance;
|
|
uint32_t type;
|
|
};
|
|
|
|
struct BSPNode
|
|
{
|
|
uint32_t plane;
|
|
|
|
int32_t frontChild;
|
|
int32_t backChild;
|
|
|
|
int16_t bboxMins[3];
|
|
int16_t bboxMaxs[3];
|
|
|
|
uint16_t firstLeafFace;
|
|
uint16_t numLeafFaces;
|
|
|
|
uint16_t firstLeafBrush;
|
|
uint16_t numLeafBrushes;
|
|
};
|
|
|
|
struct BSPTexInfo
|
|
{
|
|
float uAxis[3];
|
|
float uOffset;
|
|
|
|
float vAxis[3];
|
|
float vOffset;
|
|
|
|
uint32_t flags;
|
|
uint32_t value;
|
|
|
|
char textureName[32];
|
|
|
|
uint32_t nextTexInfo;
|
|
};
|
|
};
|
|
}
|