void CheckLeafPortalConsistancy (node_t *node) { int side, side2; portal_t *p, *p2; dplane_t plane, plane2; int i; winding_t *w; float dist; side = side2 = 0; // quiet compiler warning for (p = node->portals ; p ; p = p->next[side]) { if (p->nodes[0] == node) side = 0; else if (p->nodes[1] == node) side = 1; else Error ("CutNodePortals_r: mislinked portal"); CheckWindingInNode (p->winding, node); CheckWindingArea (p->winding); // check that the side orders are correct plane = p->plane; PlaneFromWinding (p->winding, &plane2); for (p2 = node->portals ; p2 ; p2 = p2->next[side2]) { if (p2->nodes[0] == node) side2 = 0; else if (p2->nodes[1] == node) side2 = 1; else Error ("CutNodePortals_r: mislinked portal"); w = p2->winding; for (i=0 ; i<w->numpoints ; i++) { dist = DotProduct (w->points[i], plane.normal) - plane.dist; if ( (side == 0 && dist < -1) || (side == 1 && dist > 1) ) { printf ("WARNING: portal siding direction is wrong\n"); return; } } } } }
static void CheckLeafPortalConsistancy(node_t *node) { int side, side2; portal_t *p, *p2; plane_t plane, plane2; int i; winding_t *w; vec_t dist; side = side2 = 0; // quiet compiler warning for (p = node->portals; p; p = p->next[side]) { if (p->nodes[0] == node) side = 0; else if (p->nodes[1] == node) side = 1; else Message(msgError, errMislinkedPortal); CheckWindingInNode(p->winding, node); CheckWindingArea(p->winding); // check that the side orders are correct plane = pPlanes[p->planenum]; PlaneFromWinding(p->winding, &plane2); for (p2 = node->portals; p2; p2 = p2->next[side2]) { if (p2->nodes[0] == node) side2 = 0; else if (p2->nodes[1] == node) side2 = 1; else Message(msgError, errMislinkedPortal); w = p2->winding; for (i = 0; i < w->numpoints; i++) { dist = DotProduct(w->points[i], plane.normal) - plane.dist; if ((side == 0 && dist < -1) || (side == 1 && dist > 1)) { Message(msgWarning, warnBadPortalDirection); return; } } } } }