10 #ifndef GwNavGen_BoundaryGraph_H
11 #define GwNavGen_BoundaryGraph_H
30 class DynamicNavRasterCell;
31 class GeneratorSystem;
32 class ConnectionSquare;
56 BoundaryGraph(const DynamicNavRasterCell* navRaster);
62 KyResult WriteIntermediateBoundaryGraphFile();
64 KyUInt32 VerticesCount()
const {
return m_vertices.GetElementCount(); }
65 KyUInt32 EdgesCount()
const {
return m_edges.GetElementCount(); }
66 KyUInt32 ContoursCount()
const {
return m_contours.GetElementCount(); }
67 KyUInt32 PolygonsCount()
const {
return m_polygons.GetCount(); }
68 KyUInt32 SimplifyPolylinesCount()
const {
return m_simplifyPolylines.GetCount(); }
69 KyUInt32 SimplifiedEdgesCount()
const {
return m_simplifiedEdges.GetElementCount(); }
70 KyUInt32 SimplifiedContoursCount()
const {
return m_simplifiedContours.GetElementCount(); }
71 KyUInt32 SimplifiedPolygonsCount()
const {
return m_simplifiedPolygons.GetCount(); }
74 BoundaryEdge* AddEdge(
CardinalDir dir, BoundaryEdgeType type, BoundaryPixel* leftPixel,
KyUInt32 leftColor);
77 void BuildBoundaryPixelColumns();
80 void BuildEdgesBetweenVerticalNeighbors();
83 void BuildEdgesbetweenHorizontalNeighbors();
86 KyResult BuildAllVerticesInAllColumns();
89 void BuildAllContour();
95 void BuildSimplifyPolylinesFromContour();
101 void BuildSimplifiedPolygons();
104 void InitBoundaryPixel(BoundaryPixel& BoundaryPixel);
107 KyUInt32 ProcessEdgeColumn(
const PixelPos& currentPixelPos,
const PixelPos& nextPos,
CardinalDir dir);
108 KyUInt32 ProcessBirDirEdge(
CardinalDir dir,
const PixelPos& currentPos,
const PixelPos& nextPos, BoundaryPixel* currentPixel, BoundaryPixel* nextPixel);
109 void AddObstacleEdge(BoundaryPixel* boundaryPixel,
CardinalDir dir);
110 BoundaryEdge* AddEdgeInPixel(BoundaryPixel* boundaryPixel,
CardinalDir dirLocationOfEdgeIdPixel, BoundaryEdgeType type);
112 KyResult BuildVerticesColumn(ConnectionSquare& connectionSquare,
const NavBoundaryPos& pos);
113 void AddVertexColumnToBuild(
const NavBoundaryPos& pos);
114 void SetupSquarePixelColumn(ConnectionSquare& connectionSquare,
KyUInt32 idxInSquare,
const NavBoundaryPos& pos);
115 void BuildContour(BoundaryEdge* beginEdge);
117 void BuildSimplifyPolylinesInContour(BoundaryContour& contour);
118 void BuildSimplifyPolyline_Cycle(BoundaryContour& contour);
119 void BuildSimplifyPolylines_NonCycle(BoundaryContour& contour, BoundaryEdge* firstEdgeWithStaticStart);
120 void BuildSimplifiedContour(
const BoundaryContour& contour, BoundarySimplifiedContour& simplifiedContour);
121 void AddSimplifiedEdge(BoundarySimplifiedContour* simplifiedContour, BoundaryEdge* firstEdge, BoundaryEdge* lastEdge);
123 bool IsOutsideWest(NavPixelCoord x)
const;
124 bool IsOutsideEast(NavPixelCoord x)
const;
125 bool IsOutsideSouth(NavPixelCoord y)
const;
126 bool IsOutsideNorth(NavPixelCoord y)
const;
127 bool IsOutsideExclusiveBox(
const PixelPos& pos)
const;
128 bool IsOutsideExclusiveBox(NavPixelCoord x, NavPixelCoord y)
const;
133 bool IsInputNavRasterValid();
135 GeneratorSystem* m_sys;
136 const DynamicNavRasterCell* m_navRaster;
138 PixelBox m_navPixelBox;
139 PixelBox m_exclusivePixelBox;
141 BoxOfArrays<BoundaryPixel> m_boxOfBoundaryPixelColumn;
143 GrowingPool<BoundaryEdge> m_edges;
144 GrowingPool<BoundaryEdge> m_outsideEdges;
145 GrowingPool<BoundaryVertex> m_vertices;
146 GrowingPool<BoundaryContour> m_contours;
148 KyArrayTLS<BoundaryPolygon> m_polygons;
150 BitFieldTLS m_registerVertexColumnsToBuild;
151 KyArrayTLS_POD<NavBoundaryPos> m_vertexColumnsToBuild;
153 BoundaryVertexPool m_poolForBoundaryVertexList;
154 KyArrayTLS<BoundarySimplifyPolyline*> m_simplifyPolylines;
156 GrowingPool<BoundarySimplifiedEdge> m_simplifiedEdges;
157 GrowingPool<BoundarySimplifiedContour> m_simplifiedContours;
158 KyArrayTLS<BoundarySimplifiedPolygon> m_simplifiedPolygons;
160 KyArrayTLS<ConnectedPattern> m_connectPatterns;
163 KY_INLINE
bool BoundaryGraph::IsOutsideWest(NavPixelCoord x)
const {
return x == 0; }
164 KY_INLINE
bool BoundaryGraph::IsOutsideEast(NavPixelCoord x)
const {
return x == m_navPixelBox.CountX() - 1; }
165 KY_INLINE
bool BoundaryGraph::IsOutsideSouth(NavPixelCoord y)
const {
return y == 0; }
166 KY_INLINE
bool BoundaryGraph::IsOutsideNorth(NavPixelCoord y)
const {
return y == m_navPixelBox.CountY() - 1; }
167 KY_INLINE
bool BoundaryGraph::IsOutsideExclusiveBox(
const PixelPos& pos)
const {
return IsOutsideExclusiveBox(pos.x, pos.y); }
168 KY_INLINE
bool BoundaryGraph::IsOutsideExclusiveBox(NavPixelCoord x, NavPixelCoord y)
const
170 return IsOutsideWest(x) || IsOutsideEast(x) || IsOutsideSouth(y) || IsOutsideNorth(y);
173 KY_INLINE
void BoundaryGraph::SetupSquarePixelColumn(ConnectionSquare& connectionSquare,
KyUInt32 idxInSquare,
const NavBoundaryPos& pos)
175 const BoxOfArrays<BoundaryPixel>::Column& boundaryPixelColumn = m_boxOfBoundaryPixelColumn.GetColumn(pos);
176 connectionSquare.SetupSquarePixelColumn(idxInSquare, pos, boundaryPixelColumn, IsOutsideExclusiveBox(pos));
KyInt32 KyResult
Defines a type that can be returned by methods or functions in the Gameware Navigation SDK to indicat...
Definition: types.h:254
KyUInt32 CardinalDir
Defines a type that refers to one of the cardinal points on the compass:
Definition: cardinaldir.h:23
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36