qbsp: move brush contents logic up into Brush_LoadEntity

Now LoadBrush doesn't need to know about entities anymore.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
This commit is contained in:
Kevin Shanahan 2013-02-20 15:53:17 +10:30
parent 3989b1b28d
commit e1c52985a2
1 changed files with 23 additions and 24 deletions

View File

@ -781,31 +781,13 @@ Converts a mapbrush to a bsp brush
===============
*/
static brush_t *
LoadBrush(mapentity_t *ent, const mapbrush_t *mapbrush,
const vec3_t rotate_offset, const int hullnum)
LoadBrush(const mapbrush_t *mapbrush, const vec3_t rotate_offset,
const int hullnum)
{
hullbrush_t hullbrush;
brush_t *brush;
int contents;
face_t *facelist;
contents = Brush_GetContents(mapbrush);
/* "clip" brushes don't show up in the draw hull */
if (contents == CONTENTS_CLIP) {
if (!hullnum)
return NULL;
contents = CONTENTS_SOLID;
}
/* entities never use water merging */
if (ent != pWorldEnt)
contents = CONTENTS_SOLID;
/* water brushes don't show up in clipping hulls */
if (hullnum && contents != CONTENTS_SOLID && contents != CONTENTS_SKY)
return NULL;
// create the faces
if (mapbrush->numfaces > MAX_FACES)
Error(errLowBrushFaceCount);
@ -836,7 +818,6 @@ LoadBrush(mapentity_t *ent, const mapbrush_t *mapbrush,
// create the brush
brush = AllocMem(BRUSH, 1, true);
brush->contents = contents;
brush->faces = facelist;
VectorCopy(hullbrush.mins, brush->mins);
VectorCopy(hullbrush.maxs, brush->maxs);
@ -856,10 +837,10 @@ void
Brush_LoadEntity(mapentity_t *ent, const int hullnum)
{
const char *classname;
vec3_t rotate_offset;
brush_t *brush, *next, *water, *other;
mapbrush_t *mapbrush;
int i;
vec3_t rotate_offset;
int i, contents;
for (i = 0; i < 3; i++) {
ent->mins[i] = VECT_MAX;
@ -880,11 +861,29 @@ Brush_LoadEntity(mapentity_t *ent, const int hullnum)
mapbrush = ent->mapbrushes;
ent->numbrushes = 0;
for (i = 0; i < ent->nummapbrushes; i++, mapbrush++) {
brush = LoadBrush(ent, mapbrush, rotate_offset, hullnum);
contents = Brush_GetContents(mapbrush);
/* "clip" brushes don't show up in the draw hull */
if (contents == CONTENTS_CLIP) {
if (!hullnum)
continue;
contents = CONTENTS_SOLID;
}
/* entities never use water merging */
if (ent != pWorldEnt)
contents = CONTENTS_SOLID;
/* water brushes don't show up in clipping hulls */
if (hullnum && contents != CONTENTS_SOLID && contents != CONTENTS_SKY)
continue;
brush = LoadBrush(mapbrush, rotate_offset, hullnum);
if (!brush)
continue;
ent->numbrushes++;
brush->contents = contents;
if (brush->contents != CONTENTS_SOLID) {
brush->next = water;
water = brush;