Esempio n. 1
0
qboolean RecursiveFillOutside (node_t *l, qboolean fill)
{
    portal_t	*p;
    int			s;

    if (l->contents == CONTENTS_SOLID || l->contents == CONTENTS_SKY)
        return false;

    if (l->valid == valid)
        return false;

    if (l->occupied)
    {
        hit_occupied = l->occupied;
        backdraw = 1000;
        return true;
    }

    l->valid = valid;

// fill it and it's neighbors
    if (fill)
    {
        l->contents = CONTENTS_SOLID;
        l->planenum = -1;
    }
    outleafs++;

    for (p=l->portals ; p ; )
    {
        s = (p->nodes[0] == l);

        if (RecursiveFillOutside (p->nodes[s], fill) )
        {   // leaked, so stop filling
            if (backdraw-- > 0)
            {
                MarkLeakTrail (p);
                DrawLeaf (l, 2);
            }
            return true;
        }
        p = p->next[!s];
    }

    return false;
}
Esempio n. 2
0
qboolean RecursiveFillOutside (node_t *l, qboolean fill)
{
    portal_t	*p;
    int			s;

    if (l->contents == CONTENTS_SOLID || l->contents == CONTENTS_SKY)
        return false;

    if (l->valid == valid)
        return false;

    if (l->occupied)
    {
        hit_occupied = l->occupied; // LordHavoc: this was missing from the released source... odd
        return true;
    }

    l->valid = valid;

// fill it and it's neighbors
    if (fill)
        l->contents = CONTENTS_SOLID;
    outleafs++;

    for (p = l->portals; p;)
    {
        s = (p->nodes[0] == l);

        if (RecursiveFillOutside (p->nodes[s], fill) )
        {
            // leaked, so stop filling
            if (!hullnum)
            {
                MarkLeakTrail (p);
                DrawLeaf (l, 2);
            }
            return true;
        }
        p = p->next[!s];
    }

    return false;
}