quakeforge/tools/qfbsp/include/portals.h

83 lines
2.3 KiB
C

/*
Copyright (C) 1996-1997 Id Software, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
See file, 'COPYING', for details.
$Id$
*/
#ifndef qfbsp_portals_h
#define qfbsp_portals_h
struct node_s;
typedef struct portal_s {
int planenum; ///< plane holding this portal
struct node_s *nodes[2]; ///< [0] = front side of plane
struct portal_s *next[2]; ///< [0] = front side of plane
struct winding_s *winding; ///< this portal's polygon
} portal_t;
extern struct node_s outside_node; // portals outside the world face this
/** Allocate a new portal.
Increases \c c_activeportals by one.
\return Pointer to the new portal.
*/
portal_t *AllocPortal (void);
/** Free a portal.
Only the first portal will be freed. If the portal is linked to other
portals, those portals will have to be freed seperately.
Reduces \c c_activeportals by one.
\param p The portal to free.
*/
void FreePortal (portal_t *p);
/** Builds the exact polyhedrons for the nodes and leafs.
\param headnode The root of the world bsp.
*/
void PortalizeWorld (struct node_s *headnode);
/** Builds the exact polyhedrons for the nodes and leafs.
Like PortalizeWorld, but stop at detail nodes - Alexander Malmberg.
\param headnode The root of the world bsp.
*/
void PortalizeWorldDetail (struct node_s *headnode); // stop at detail nodes
/** Free all portals from a node and its decendents.
\param node The node from which to remove and free portals.
*/
void FreeAllPortals (struct node_s *node);
/** Write the map's portals to the portal file.
\param headnode The root of the map's bsp.
*/
void WritePortalfile (struct node_s *headnode);
#endif//qfbsp_portals_h