Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/recastnavigation/Detour/Include/DetourTileNavMesh.h')
-rw-r--r--extern/recastnavigation/Detour/Include/DetourTileNavMesh.h315
1 files changed, 0 insertions, 315 deletions
diff --git a/extern/recastnavigation/Detour/Include/DetourTileNavMesh.h b/extern/recastnavigation/Detour/Include/DetourTileNavMesh.h
deleted file mode 100644
index 50ccdd118e8..00000000000
--- a/extern/recastnavigation/Detour/Include/DetourTileNavMesh.h
+++ /dev/null
@@ -1,315 +0,0 @@
-//
-// Copyright (c) 2009 Mikko Mononen memon@inside.org
-//
-// This software is provided 'as-is', without any express or implied
-// warranty. In no event will the authors be held liable for any damages
-// arising from the use of this software.
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-// 1. The origin of this software must not be misrepresented; you must not
-// claim that you wrote the original software. If you use this software
-// in a product, an acknowledgment in the product documentation would be
-// appreciated but is not required.
-// 2. Altered source versions must be plainly marked as such, and must not be
-// misrepresented as being the original software.
-// 3. This notice may not be removed or altered from any source distribution.
-//
-
-#ifndef DETOURTILENAVMESH_H
-#define DETOURTILENAVMESH_H
-
-// Reference to navigation polygon.
-typedef unsigned int dtTilePolyRef;
-
-// The bits used in the poly ref.
-static const int DT_TILE_REF_SALT_BITS = 12;
-static const int DT_TILE_REF_TILE_BITS = 12;
-static const int DT_TILE_REF_POLY_BITS = 8;
-static const int DT_TILE_REF_SALT_MASK = (1<<DT_TILE_REF_SALT_BITS)-1;
-static const int DT_TILE_REF_TILE_MASK = (1<<DT_TILE_REF_TILE_BITS)-1;
-static const int DT_TILE_REF_POLY_MASK = (1<<DT_TILE_REF_POLY_BITS)-1;
-
-// Maximum number of vertices per navigation polygon.
-static const int DT_TILE_VERTS_PER_POLYGON = 6;
-
-static const int DT_MAX_TILES = 1 << DT_TILE_REF_TILE_BITS;
-static const int DT_MAX_POLYGONS = 1 << DT_TILE_REF_POLY_BITS;
-
-static const int DT_TILE_NAVMESH_MAGIC = (('N'<<24) | ('A'<<16) | ('V'<<8) | 'T');
-static const int DT_TILE_NAVMESH_VERSION = 2;
-
-// Structure holding the navigation polygon data.
-struct dtTilePoly
-{
- unsigned short v[DT_TILE_VERTS_PER_POLYGON]; // Indices to vertices of the poly.
- unsigned short n[DT_TILE_VERTS_PER_POLYGON]; // Refs to neighbours of the poly.
- unsigned short links; // Base index to header 'links' array.
- unsigned char nlinks; // Number of links for
- unsigned char nv; // Number of vertices.
- unsigned char flags; // Flags (not used).
-};
-
-struct dtTilePolyDetail
-{
- unsigned short vbase; // Offset to detail vertex array.
- unsigned short nverts; // Number of vertices in the detail mesh.
- unsigned short tbase; // Offset to detail triangle array.
- unsigned short ntris; // Number of triangles.
-};
-
-// Stucture holding a link to another polygon.
-struct dtTileLink
-{
- dtTilePolyRef ref; // Neighbour reference.
- unsigned short p; // Index to polygon which owns this link.
- unsigned char e; // Index to polygon edge which owns this link.
- unsigned char side; // If boundary link, defines on which side the link is.
- unsigned char bmin, bmax; // If boundary link, defines the sub edge area.
-};
-
-struct dtTileHeader
-{
- int magic; // Magic number, used to identify the data.
- int version; // Data version number.
- int npolys; // Number of polygons in the tile.
- int nverts; // Number of vertices in the tile.
- int nlinks; // Number of links in the tile (will be updated when tile is added).
- int maxlinks; // Number of allocated links.
- int ndmeshes;
- int ndverts;
- int ndtris;
- float bmin[3], bmax[3]; // Bounding box of the tile.
- dtTilePoly* polys; // Pointer to the polygons (will be updated when tile is added).
- float* verts; // Pointer to the vertices (will be updated when tile added).
- dtTileLink* links; // Pointer to the links (will be updated when tile added).
- dtTilePolyDetail* dmeshes;
- float* dverts;
- unsigned char* dtris;
-};
-
-struct dtTile
-{
- int salt; // Counter describing modifications to the tile.
- int x,y; // Grid location of the tile.
- dtTileHeader* header; // Pointer to tile header.
- unsigned char* data; // Pointer to tile data.
- int dataSize; // Size of the tile data.
- bool ownsData; // Flag indicating of the navmesh should release the data.
- dtTile* next; // Next free tile or, next tile in spatial grid.
-};
-
-// Encodes a tile id.
-inline dtTilePolyRef dtEncodeTileId(unsigned int salt, unsigned int it, unsigned int ip)
-{
- return (salt << (DT_TILE_REF_POLY_BITS+DT_TILE_REF_TILE_BITS)) | ((it+1) << DT_TILE_REF_POLY_BITS) | ip;
-}
-
-// Decodes a tile id.
-inline void dtDecodeTileId(dtTilePolyRef ref, unsigned int& salt, unsigned int& it, unsigned int& ip)
-{
- salt = (ref >> (DT_TILE_REF_POLY_BITS+DT_TILE_REF_TILE_BITS)) & DT_TILE_REF_SALT_MASK;
- it = ((ref >> DT_TILE_REF_POLY_BITS) & DT_TILE_REF_TILE_MASK) - 1;
- ip = ref & DT_TILE_REF_POLY_MASK;
-}
-
-static const int DT_TILE_LOOKUP_SIZE = DT_MAX_TILES/4;
-
-class dtTiledNavMesh
-{
-public:
- dtTiledNavMesh();
- ~dtTiledNavMesh();
-
- // Initializes the nav mesh.
- // Params:
- // orig - (in) origin of the nav mesh tile space.
- // tileSiz - (in) size of a tile.
- // portalheight - (in) height of the portal region between tiles.
- // Returns: True if succeed, else false.
- bool init(const float* orig, float tileSize, float portalHeight);
-
- // Adds new tile into the navmesh.
- // The add will fail if the data is in wrong format,
- // there is not enough tiles left, or if there is a tile already at the location.
- // Params:
- // x,y - (in) Location of the new tile.
- // data - (in) Data of the new tile mesh.
- // dataSize - (in) Data size of the new tile mesh.
- // ownsData - (in) Flag indicating if the navmesh should own and delete the data.
- // Returns: True if tile was added, else false.
- bool addTileAt(int x, int y, unsigned char* data, int dataSize, bool ownsData);
-
- // Removes tile at specified location.
- // Params:
- // x,y - (in) Location of the tile to remove.
- // data - (out) Data associated with deleted tile.
- // dataSize - (out) Size of the data associated with deleted tile.
- // Returns: True if remove suceed, else false.
- bool removeTileAt(int x, int y, unsigned char** data, int* dataSize);
-
- // Returns pointer to tile at specified location.
- // Params:
- // x,y - (in) Location of the tile to get.
- // Returns: pointer to tile if tile exists or 0 tile does not exists.
- dtTile* getTileAt(int x, int y);
-
- // Returns pointer to tile in the tile array.
- // Params:
- // i - (in) Index to the tile to retrieve, must be in range [0,DT_MAX_TILES[
- // Returns: Pointer to specified tile.
- dtTile* getTile(int i);
- const dtTile* getTile(int i) const;
-
- // Finds the nearest navigation polygon around the center location.
- // Params:
- // center - (in) The center of the search box.
- // extents - (in) The extents of the search box.
- // Returns: Reference identifier for the polygon, or 0 if no polygons found.
- dtTilePolyRef findNearestPoly(const float* center, const float* extents);
-
- // Returns polygons which touch the query box.
- // Params:
- // center - (in) the center of the search box.
- // extents - (in) the extents of the search box.
- // polys - (out) array holding the search result.
- // maxPolys - (in) The max number of polygons the polys array can hold.
- // Returns: Number of polygons in search result array.
- int queryPolygons(const float* center, const float* extents,
- dtTilePolyRef* polys, const int maxPolys);
-
- // Finds path from start polygon to end polygon.
- // If target polygon canno be reached through the navigation graph,
- // the last node on the array is nearest node to the end polygon.
- // Params:
- // startRef - (in) ref to path start polygon.
- // endRef - (in) ref to path end polygon.
- // path - (out) array holding the search result.
- // maxPathSize - (in) The max number of polygons the path array can hold.
- // Returns: Number of polygons in search result array.
- int findPath(dtTilePolyRef startRef, dtTilePolyRef endRef,
- const float* startPos, const float* endPos,
- dtTilePolyRef* path, const int maxPathSize);
-
- // Finds a straight path from start to end locations within the corridor
- // described by the path polygons.
- // Start and end locations will be clamped on the corridor.
- // Params:
- // startPos - (in) Path start location.
- // endPos - (in) Path end location.
- // path - (in) Array of connected polygons describing the corridor.
- // pathSize - (in) Number of polygons in path array.
- // straightPath - (out) Points describing the straight path.
- // maxStraightPathSize - (in) The max number of points the straight path array can hold.
- // Returns: Number of points in the path.
- int findStraightPath(const float* startPos, const float* endPos,
- const dtTilePolyRef* path, const int pathSize,
- float* straightPath, const int maxStraightPathSize);
-
- // Finds intersection againts walls starting from start pos.
- // Params:
- // startRef - (in) ref to the polygon where the start lies.
- // startPos - (in) start position of the query.
- // endPos - (in) end position of the query.
- // t - (out) hit parameter along the segment, 0 if no hit.
- // endRef - (out) ref to the last polygon which was processed.
- // Returns: Number of polygons in path or 0 if failed.
- int raycast(dtTilePolyRef startRef, const float* startPos, const float* endPos,
- float& t, dtTilePolyRef* path, const int pathSize);
-
- // Returns distance to nearest wall from the specified location.
- // Params:
- // centerRef - (in) ref to the polygon where the center lies.
- // centerPos - (in) center if the query circle.
- // maxRadius - (in) max search radius.
- // hitPos - (out) location of the nearest hit.
- // hitNormal - (out) normal of the nearest hit.
- // Returns: Distance to nearest wall from the test location.
- float findDistanceToWall(dtTilePolyRef centerRef, const float* centerPos, float maxRadius,
- float* hitPos, float* hitNormal);
-
- // Finds polygons found along the navigation graph which touch the specified circle.
- // Params:
- // centerRef - (in) ref to the polygon where the center lies.
- // centerPos - (in) center if the query circle
- // radius - (in) radius of the query circle
- // resultRef - (out, opt) refs to the polygons touched by the circle.
- // resultParent - (out, opt) parent of each result polygon.
- // resultCost - (out, opt) search cost at each result polygon.
- // maxResult - (int) maximum capacity of search results.
- // Returns: Number of results.
- int findPolysAround(dtTilePolyRef centerRef, const float* centerPos, float radius,
- dtTilePolyRef* resultRef, dtTilePolyRef* resultParent, float* resultCost,
- const int maxResult);
-
- // Returns closest point on navigation polygon.
- // Params:
- // ref - (in) ref to the polygon.
- // pos - (in) the point to check.
- // closest - (out) closest point.
- // Returns: true if closest point found.
- bool closestPointToPoly(dtTilePolyRef ref, const float* pos, float* closest) const;
-
- // Returns height of the polygon at specified location.
- // Params:
- // ref - (in) ref to the polygon.
- // pos - (in) the point where to locate the height.
- // height - (out) height at the location.
- // Returns: true if over polygon.
- bool getPolyHeight(dtTilePolyRef ref, const float* pos, float* height) const;
-
- // Returns pointer to a polygon based on ref.
- const dtTilePoly* getPolyByRef(dtTilePolyRef ref) const;
-
- // Returns pointer to a polygon vertices based on ref.
- const float* getPolyVertsByRef(dtTilePolyRef ref) const;
-
- // Returns pointer to a polygon link based on ref.
- const dtTileLink* getPolyLinksByRef(dtTilePolyRef ref) const;
-
-private:
-
- // Returns base id for the tile.
- dtTilePolyRef getTileId(dtTile* tile);
- // Returns neighbour tile based on side.
- dtTile* getNeighbourTileAt(int x, int y, int side);
- // Returns all polygons in neighbour tile based on portal defined by the segment.
- int findConnectingPolys(const float* va, const float* vb,
- dtTile* tile, int side,
- dtTilePolyRef* con, float* conarea, int maxcon);
- // Builds internal polygons links for a tile.
- void buildIntLinks(dtTile* tile);
- // Builds external polygon links for a tile.
- void buildExtLinks(dtTile* tile, dtTile* target, int side);
- // Removes external links at specified side.
- void removeExtLinks(dtTile* tile, int side);
- // Queries polygons within a tile.
- int queryTilePolygons(dtTile* tile, const float* qmin, const float* qmax,
- dtTilePolyRef* polys, const int maxPolys);
-
- float getCost(dtTilePolyRef prev, dtTilePolyRef from, dtTilePolyRef to) const;
- float getFirstCost(const float* pos, dtTilePolyRef from, dtTilePolyRef to) const;
- float getLastCost(dtTilePolyRef from, dtTilePolyRef to, const float* pos) const;
- float getHeuristic(const float* from, const float* to) const;
-
- // Returns portal points between two polygons.
- bool getPortalPoints(dtTilePolyRef from, dtTilePolyRef to, float* left, float* right) const;
- // Returns edge mid point between two polygons.
- bool getEdgeMidPoint(dtTilePolyRef from, dtTilePolyRef to, float* mid) const;
-
- float m_orig[3];
- float m_tileSize;
- float m_portalHeight;
-
- dtTile* m_posLookup[DT_TILE_LOOKUP_SIZE];
- dtTile* m_nextFree;
- dtTile m_tiles[DT_MAX_TILES];
-
- dtTileLink* m_tmpLinks;
- int m_ntmpLinks;
-
- class dtNodePool* m_nodePool;
- class dtNodeQueue* m_openList;
-};
-
-#endif // DETOURTILENAVMESH_H