- if (numpoints > 256)
- {
- Con_Print("Polygon with more than 256 points not supported yet (fixme!)\n");
- return;
- }
- polyf_brushstart.numpoints = numpoints;
- polyf_brushstart.numedgedirs = numpoints;
- polyf_brushstart.numplanes = numpoints + 2;
- polyf_brushstart.points = polyf_pointsstart;//(colpointf_t *)points;
- polyf_brushstart.planes = polyf_planesstart;
- polyf_brushstart.supercontents = supercontents;
- polyf_brushstart.q3surfaceflags = q3surfaceflags;
- polyf_brushstart.texture = texture;
- for (i = 0;i < numpoints;i++)
- Matrix4x4_Transform(polygonmatrixstart, points + i * 3, polyf_brushstart.points[i].v);
- polyf_brushend.numpoints = numpoints;
- polyf_brushend.numedgedirs = numpoints;
- polyf_brushend.numplanes = numpoints + 2;
- polyf_brushend.points = polyf_pointsend;//(colpointf_t *)points;
- polyf_brushend.planes = polyf_planesend;
- polyf_brushend.supercontents = supercontents;
- polyf_brushend.q3surfaceflags = q3surfaceflags;
- polyf_brushend.texture = texture;
- for (i = 0;i < numpoints;i++)
- Matrix4x4_Transform(polygonmatrixend, points + i * 3, polyf_brushend.points[i].v);
- for (i = 0;i < polyf_brushstart.numplanes;i++)
- {
- polyf_brushstart.planes[i].q3surfaceflags = q3surfaceflags;
- polyf_brushstart.planes[i].texture = texture;
- }
- Collision_SnapCopyPoints(polyf_brushstart.numpoints, polyf_pointsstart, polyf_pointsstart, COLLISION_SNAPSCALE, COLLISION_SNAP);
- Collision_SnapCopyPoints(polyf_brushend.numpoints, polyf_pointsend, polyf_pointsend, COLLISION_SNAPSCALE, COLLISION_SNAP);
- Collision_CalcEdgeDirsForPolygonBrushFloat(&polyf_brushstart);
- Collision_CalcEdgeDirsForPolygonBrushFloat(&polyf_brushend);
- Collision_CalcPlanesForPolygonBrushFloat(&polyf_brushstart);
- Collision_CalcPlanesForPolygonBrushFloat(&polyf_brushend);
-
- //Collision_PrintBrushAsQHull(&polyf_brushstart, "polyf_brushstart");
- //Collision_PrintBrushAsQHull(&polyf_brushend, "polyf_brushend");
-
- Collision_TraceBrushBrushFloat(trace, thisbrush_start, thisbrush_end, &polyf_brushstart, &polyf_brushend);
-}
-
-
-
-#define MAX_BRUSHFORBOX 16
-static unsigned int brushforbox_index = 0;
-// note: this relies on integer overflow to be consistent with modulo
-// MAX_BRUSHFORBOX, or in other words, MAX_BRUSHFORBOX must be a power of two!
-static colpointf_t brushforbox_point[MAX_BRUSHFORBOX*8];
-static colpointf_t brushforbox_edgedir[MAX_BRUSHFORBOX*6];
-static colplanef_t brushforbox_plane[MAX_BRUSHFORBOX*6];
-static colbrushf_t brushforbox_brush[MAX_BRUSHFORBOX];
-static colbrushf_t brushforpoint_brush[MAX_BRUSHFORBOX];
-
-void Collision_InitBrushForBox(void)
-{
- int i;
- for (i = 0;i < MAX_BRUSHFORBOX;i++)
- {
- brushforbox_brush[i].numpoints = 8;
- brushforbox_brush[i].numedgedirs = 6;
- brushforbox_brush[i].numplanes = 6;
- brushforbox_brush[i].points = brushforbox_point + i * 8;
- brushforbox_brush[i].edgedirs = brushforbox_edgedir + i * 6;
- brushforbox_brush[i].planes = brushforbox_plane + i * 6;
- brushforpoint_brush[i].numpoints = 1;
- brushforpoint_brush[i].numedgedirs = 0;
- brushforpoint_brush[i].numplanes = 0;
- brushforpoint_brush[i].points = brushforbox_point + i * 8;
- brushforpoint_brush[i].edgedirs = brushforbox_edgedir + i * 6;
- brushforpoint_brush[i].planes = brushforbox_plane + i * 6;
- }
-}
-
-colbrushf_t *Collision_BrushForBox(const matrix4x4_t *matrix, const vec3_t mins, const vec3_t maxs, int supercontents, int q3surfaceflags, texture_t *texture)
-{
- int i, j;
- vec3_t v;
- colbrushf_t *brush;
- if (brushforbox_brush[0].numpoints == 0)
- Collision_InitBrushForBox();
- // FIXME: these probably don't actually need to be normalized if the collision code does not care