Orange/include/Orange/Formats/BSP/Quake2.h

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;
};
};
}