face_t *MergeFaceToList (face_t *face, face_t *list) { face_t *newf, *f; for (f=list ; f ; f=f->next) { //CheckColinear (f); if (mergedebug) { Draw_ClearWindow (); Draw_DrawFace (face); Draw_DrawFace (f); Draw_SetBlack (); } newf = TryMerge (face, f); if (!newf) continue; FreeFace (face); f->numpoints = -1; // merged out return MergeFaceToList (newf, list); } // didn't merge, so add at start face->next = list; return face; }
/* ============ Brush_DrawAll ============ */ void Brush_DrawAll (brushset_t *bs) { brush_t *b; face_t *f; for (b=bs->brushes ; b ; b=b->next) for (f=b->faces ; f ; f=f->next) Draw_DrawFace (f); }
/* ================== DrawSurfaces ================== */ void DrawSurfaces (surface_t *surf) { face_t *f; Draw_ClearWindow (); for ( ; surf ; surf=surf->next) { for (f = surf->faces ; f ; f=f->next) { Draw_DrawFace (f); } } }
/* ============ MergeAll ============ */ void MergeAll (surface_t *surfhead) { surface_t *surf; int mergefaces; face_t *f; printf ("---- MergeAll ----\n"); mergefaces = 0; for (surf = surfhead ; surf ; surf=surf->next) { MergePlaneFaces (surf); Draw_ClearWindow (); for (f=surf->faces ; f ; f=f->next) { Draw_DrawFace (f); mergefaces++; } } printf ("%i mergefaces\n", mergefaces); }
/* ================== SaveOutside Saves all of the faces in the outside list to the bsp plane list ================== */ static void SaveOutside (qboolean mirror) { face_t *f, *next, *newf; int i; int planenum; for (f = outside ; f ; f = next) { next = f->next; csgfaces++; Draw_DrawFace (f); planenum = f->planenum; if (mirror) { newf = NewFaceFromFace (f); newf->numpoints = f->numpoints; newf->planeside = f->planeside ^ 1; // reverse side newf->contents[0] = f->contents[1]; newf->contents[1] = f->contents[0]; for (i = 0 ; i < f->numpoints ; i++) // add points backwards { VectorCopy (f->pts[f->numpoints-1-i], newf->pts[i]); } } else newf = NULL; validfaces[planenum] = MergeFaceToList(f, validfaces[planenum]); if (newf) validfaces[planenum] = MergeFaceToList(newf, validfaces[planenum]); validfaces[planenum] = FreeMergeListScraps (validfaces[planenum]); } }
void DrawList (face_t *list) { for ( ; list ; list = list->next) Draw_DrawFace (list); }