Example #1
0
bool getentboundingbox(const extentity &e, ivec &o, ivec &r)
{
    switch(e.type)
    {
        case ET_EMPTY:
            return false;
        case ET_DECAL:
            {
                DecalSlot &s = lookupdecalslot(e.attr[0], false);
                vec center, radius;
                decalboundbox(e, s, center, radius);
                center.add(e.o);
                radius.max(entselradius);
                o = vec(center).sub(radius);
                r = vec(center).add(radius).add(1);
                break;
            }
        case ET_MAPMODEL:
            if(model *m = entities::getmodel(e))
            {
                vec center, radius;
                mmboundbox(e, m, center, radius);
                center.add(e.o);
                radius.max(entselradius);
                o = vec(center).sub(radius);
                r = vec(center).add(radius).add(1);
                break;
            }
        case ET_OBSTACLE: /* OF */
        {
            int a = e.attr[3], b = e.attr[4], c = e.attr[5];
            if (!a || !b || !c) {
                o = vec(e.o).sub(entselradius);
                r = vec(e.o).add(entselradius+1);
                break;
            }
            vec center = vec(0, 0, 0), radius = vec(a, b, c);
            rotatebb(center, radius, e.attr[0], e.attr[1], e.attr[2]);
            center.add(e.o);
            radius.max(entselradius);
            o = vec(center).sub(radius);
            r = vec(center).add(radius).add(1);
            break;
        }
        // invisible mapmodels use entselradius
        default:
            o = vec(e.o).sub(entselradius);
            r = vec(e.o).add(entselradius+1);
            break;
    }
    return true;
}
Example #2
0
bool getentboundingbox(const extentity &e, ivec &o, ivec &r)
{
    switch(e.type)
    {
        case ET_EMPTY:
            return false;
        case ET_DECAL:
            {
                DecalSlot &s = lookupdecalslot(e.attr1, false);
                vec center, radius;
                decalboundbox(e, s, center, radius);
                center.add(e.o);
                radius.max(entselradius);
                o = vec(center).sub(radius);
                r = vec(center).add(radius).add(1);
                break;
            }
        case ET_MAPMODEL:
            if(model *m = loadmapmodel(e.attr1))
            {
                vec center, radius;
                mmboundbox(e, m, center, radius);
                center.add(e.o);
                radius.max(entselradius);
                o = vec(center).sub(radius);
                r = vec(center).add(radius).add(1);
                break;
            }
        // invisible mapmodels use entselradius
        default:
            o = vec(e.o).sub(entselradius);
            r = vec(e.o).add(entselradius+1);
            break;
    }
    return true;
}