123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- #ifndef HLBSP_H__
- #define HLBSP_H__
- #if _MSC_VER >= 1000
- #pragma once
- #endif
- #include "cmdlib.h"
- #include "messages.h"
- #include "win32fix.h"
- #include "log.h"
- #include "hlassert.h"
- #include "mathlib.h"
- #include "bspfile.h"
- #include "blockmem.h"
- #include "filelib.h"
- #include "threads.h"
- #include "winding.h"
- #define ENTITIES_VOID "entities.void"
- #define ENTITIES_VOID_EXT ".void"
- #define BOGUS_RANGE 18000
- #define SIDESPACE 24
- #define MIN_SUBDIVIDE_SIZE 64
- #ifdef ZHLT_GENERAL
- #define MAX_SUBDIVIDE_SIZE 512
- #else
- #define MAX_SUBDIVIDE_SIZE 240
- #endif
- #define DEFAULT_SUBDIVIDE_SIZE 240
- #define MIN_MAXNODE_SIZE 64
- #define MAX_MAXNODE_SIZE 8192
- #define DEFAULT_MAXNODE_SIZE 1024
- #define DEFAULT_NOFILL false
- #define DEFAULT_NOTJUNC false
- #define DEFAULT_NOCLIP false
- #define DEFAULT_NOOPT false
- #define DEFAULT_LEAKONLY false
- #define DEFAULT_WATERVIS false
- #define DEFAULT_CHART false
- #define DEFAULT_INFO true
- #ifdef ZHLT_NULLTEX
- #define DEFAULT_NULLTEX true
- #endif
- #ifdef ZHLT_PROGRESSFILE
- #define DEFAULT_PROGRESSFILE NULL
- #endif
- #ifdef SYSTEM_WIN32
- #define DEFAULT_ESTIMATE false
- #endif
- #ifdef SYSTEM_POSIX
- #define DEFAULT_ESTIMATE true
- #endif
- #ifdef ZHLT_DETAIL
- #define DEFAULT_DETAIL true
- #endif
- #define MAXEDGES 48
- #define MAXPOINTS 28
-
- #define MAXNODESIZE 1024
- typedef enum
- {
- face_normal = 0,
- face_hint,
- face_skip,
- #ifdef ZHLT_NULLTEX
- face_null,
- #endif
- #ifdef ZHLT_DETAIL
- face_detail
- #endif
-
- }
- facestyle_e;
- typedef struct face_s
- {
- struct face_s* next;
- int planenum;
- int texturenum;
- int contents;
- struct face_s* original;
- int outputnumber;
- int numpoints;
- facestyle_e facestyle;
-
- vec3_t pts[MAXEDGES];
- }
- face_t;
- typedef struct surface_s
- {
- struct surface_s* next;
- int planenum;
- vec3_t mins, maxs;
- struct node_s* onnode;
-
- face_t* faces;
- }
- surface_t;
- typedef struct
- {
- vec3_t mins, maxs;
- surface_t* surfaces;
- }
- surfchain_t;
- #define PLANENUM_LEAF -1
- typedef struct node_s
- {
- surface_t* surfaces;
- vec3_t mins, maxs;
-
- int planenum;
- struct node_s* children[2];
- face_t* faces;
-
- int contents;
- face_t** markfaces;
- struct portal_s* portals;
- int visleafnum;
- int valid;
- int occupied;
- }
- node_t;
- #define NUM_HULLS 4
- extern void SubdivideFace(face_t* f, face_t** prevptr);
- extern node_t* SolidBSP(const surfchain_t* const surfhead, bool report_progress);
- extern void MergePlaneFaces(surface_t* plane);
- extern void MergeAll(surface_t* surfhead);
- extern void MakeFaceEdges();
- extern int GetEdge(const vec3_t p1, const vec3_t p2, face_t* f);
- typedef struct portal_s
- {
- dplane_t plane;
- node_t* onnode;
- node_t* nodes[2];
- struct portal_s* next[2];
- Winding* winding;
- }
- portal_t;
- extern node_t g_outside_node;
- extern void AddPortalToNodes(portal_t* p, node_t* front, node_t* back);
- extern void RemovePortalFromNode(portal_t* portal, node_t* l);
- extern void MakeHeadnodePortals(node_t* node, const vec3_t mins, const vec3_t maxs);
- extern void FreePortals(node_t* node);
- extern void WritePortalfile(node_t* headnode);
- void tjunc(node_t* headnode);
- extern void WriteClipNodes(node_t* headnode);
- extern void WriteDrawNodes(node_t* headnode);
- extern void BeginBSPFile();
- extern void FinishBSPFile();
- extern node_t* FillOutside(node_t* node, bool leakfile, unsigned hullnum);
- extern void LoadAllowableOutsideList(const char* const filename);
- extern void FreeAllowableOutsideList();
- extern void GetParamsFromEnt(entity_t* mapent);
- extern face_t* AllocFace();
- extern void FreeFace(face_t* f);
- extern struct portal_s* AllocPortal();
- extern void FreePortal(struct portal_s* p);
- extern surface_t* AllocSurface();
- extern void FreeSurface(surface_t* s);
- extern node_t* AllocNode();
- extern bool CheckFaceForHint(const face_t* const f);
- extern bool CheckFaceForSkip(const face_t* const f);
- #ifdef ZHLT_NULLTEX
- extern bool CheckFaceForNull(const face_t* const f);
- #endif
- extern bool CheckFaceForEnv_Sky(const face_t* const f);
- #ifdef ZHLT_DETAIL
- extern bool CheckFaceForDetail(const face_t* const f);
- #endif
- extern void CullStuff();
- extern bool g_nofill;
- extern bool g_notjunc;
- extern bool g_watervis;
- extern bool g_chart;
- extern bool g_estimate;
- extern int g_maxnode_size;
- extern int g_subdivide_size;
- extern int g_hullnum;
- extern bool g_bLeakOnly;
- extern bool g_bLeaked;
- extern char g_portfilename[_MAX_PATH];
- extern char g_pointfilename[_MAX_PATH];
- extern char g_linefilename[_MAX_PATH];
- extern char g_bspfilename[_MAX_PATH];
- #ifdef ZHLT_DETAIL
- extern bool g_bDetailBrushes;
- #endif
- #ifdef ZHLT_NULLTEX
- extern bool g_bUseNullTex;
- #endif
- extern face_t* NewFaceFromFace(const face_t* const in);
- extern void SplitFace(face_t* in, const dplane_t* const split, face_t** front, face_t** back);
- #endif
|