- // box trace, performed as brush trace
- colbrushf_t *thisbrush_start, *thisbrush_end;
- vec3_t boxstartmins, boxstartmaxs, boxendmins, boxendmaxs;
- segmentmins[0] = min(start[0], end[0]) + boxmins[0] - 1;
- segmentmins[1] = min(start[1], end[1]) + boxmins[1] - 1;
- segmentmins[2] = min(start[2], end[2]) + boxmins[2] - 1;
- segmentmaxs[0] = max(start[0], end[0]) + boxmaxs[0] + 1;
- segmentmaxs[1] = max(start[1], end[1]) + boxmaxs[1] + 1;
- segmentmaxs[2] = max(start[2], end[2]) + boxmaxs[2] + 1;
- VectorAdd(start, boxmins, boxstartmins);
- VectorAdd(start, boxmaxs, boxstartmaxs);
- VectorAdd(end, boxmins, boxendmins);
- VectorAdd(end, boxmaxs, boxendmaxs);
- thisbrush_start = Collision_BrushForBox(&identitymatrix, boxstartmins, boxstartmaxs, 0, 0, NULL);
- thisbrush_end = Collision_BrushForBox(&identitymatrix, boxendmins, boxendmaxs, 0, 0, NULL);
- for (i = 0, surface = model->data_surfaces;i < model->num_surfaces;i++, surface++)
- {
- if (maxvertices < model->surfmesh.num_vertices)
- {
- if (vertex3f)
- Z_Free(vertex3f);
- maxvertices = (model->surfmesh.num_vertices + 255) & ~255;
- vertex3f = (float *)Z_Malloc(maxvertices * sizeof(float[3]));
- }
- Mod_Alias_GetMesh_Vertices(model, frameblend, vertex3f, NULL, NULL, NULL);
- Collision_TraceBrushTriangleMeshFloat(trace, thisbrush_start, thisbrush_end, model->surfmesh.num_triangles, model->surfmesh.data_element3i, vertex3f, SUPERCONTENTS_SOLID, 0, surface->texture, segmentmins, segmentmaxs);
- }