17 class DatabaseGeometryBuildingManager
19 class DatabaseVisualTile
22 DatabaseVisualTile() : m_needToBeRebuild(false) {}
23 ~DatabaseVisualTile() {}
25 Ptr<IVisualGeometry> m_visualGeometry;
27 bool m_needToBeRebuild;
31 DatabaseGeometryBuildingManager();
32 ~DatabaseGeometryBuildingManager();
36 void BuildGeometry(
bool forceRebuildAll =
false);
38 void SetDetailLevel(DatabaseVisualDetails::Enum detailLevel) { m_visualDetails = detailLevel; }
39 DatabaseVisualDetails::Enum GetDetailLevel()
const {
return m_visualDetails; }
42 void SetVisualGeometry(Ptr<IVisualGeometry> geometry);
43 IVisualGeometry* GetVisualGeometry()
const {
return m_visualGeometry; }
46 void SetVisualGeometryFactory(Ptr<IVisualGeometryFactory> factory);
47 IVisualGeometryFactory* GetVisualGeometryFactory()
const {
return m_visualGeometryFactory; }
51 void SetTileSize(
KyInt32 tileSize);
54 void OnEnlarge(
const CellBox& cellBox);
55 void OnChangeAtPos(
const CellPos& cellPos);
56 void OnChangeInGraph();
59 Vec2i ComputeTilePosFromCellPos(
const CellPos& cellPos)
const;
60 Box2i ComputeTileBoxFromCellBox(
const CellBox& cellBox)
const;
61 CellBox ComputeCellBoxForTilePos(
const Vec2i& tilePos)
const;
64 friend class Database;
65 void OnEnlarge_FactoryProvided(
const CellBox& newCellBox);
66 void OnChangeAtPos_FactoryProvided(
const CellPos& cellPos);
67 void OnChangeInGraph_FactoryProvided();
69 void AskNewGeometryForTileIfNeeded(DatabaseVisualTile& tile);
74 DatabaseVisualDetails::Enum m_visualDetails;
85 DatabaseVisualTile* m_bufferOfTile;
88 DatabaseVisualTile m_tileForGraphs;
90 Ptr<IVisualGeometryFactory> m_visualGeometryFactory;
93 Ptr<IVisualGeometry> m_visualGeometry;
96 KY_INLINE
KyInt32 DatabaseGeometryBuildingManager::ComputeTileCoordFromCellCoord(
KyInt32 coord)
const
98 return coord >= 0 ? coord / m_tileSize : ((coord + 1) / m_tileSize) - 1;
101 KY_INLINE Vec2i DatabaseGeometryBuildingManager::ComputeTilePosFromCellPos(
const CellPos& cellPos)
const
103 return Vec2i(ComputeTileCoordFromCellCoord(cellPos.x), ComputeTileCoordFromCellCoord(cellPos.y));
106 KY_INLINE Box2i DatabaseGeometryBuildingManager::ComputeTileBoxFromCellBox(
const CellBox& cellBox)
const
108 return Box2i(ComputeTilePosFromCellPos(cellBox.Min()), ComputeTilePosFromCellPos(cellBox.Max()));
111 KY_INLINE
CellBox DatabaseGeometryBuildingManager::ComputeCellBoxForTilePos(
const Vec2i& tilePos)
const
113 const CellPos minCellPos(tilePos.x * m_tileSize, tilePos.y * m_tileSize);
114 return CellBox(minCellPos, minCellPos +
CellPos(m_tileSize - 1, m_tileSize - 1));
117 KY_INLINE
void DatabaseGeometryBuildingManager::OnEnlarge(
const CellBox& cellBox)
119 if (m_visualGeometryFactory !=
nullptr)
120 OnEnlarge_FactoryProvided(cellBox);
122 KY_INLINE
void DatabaseGeometryBuildingManager::OnChangeAtPos(
const CellPos& cellPos)
124 if (m_visualGeometryFactory !=
nullptr)
125 OnChangeAtPos_FactoryProvided(cellPos);
127 KY_INLINE
void DatabaseGeometryBuildingManager::OnChangeInGraph()
129 if (m_visualGeometryFactory !=
nullptr)
130 AskNewGeometryForTileIfNeeded(m_tileForGraphs);
133 KY_INLINE
void DatabaseGeometryBuildingManager::AskNewGeometryForTileIfNeeded(DatabaseVisualTile& tile)
135 tile.m_needToBeRebuild =
true;
136 if (tile.m_visualGeometry ==
nullptr)
138 tile.m_visualGeometry = m_visualGeometryFactory->CreateIVisualGeometryForDatabase(m_databaseIdx);
139 KY_LOG_ERROR_IF(tile.m_visualGeometry ==
nullptr,
140 (
"Failed to create an IVisualGeometry from the IVisualGeometryFactory. A portion of the Database won't be displayed."));
Box2i CellBox
A type that represents a bounding box around cells in a 2D grid.
Definition: navmeshtypes.h:31
Vec2i CellPos
A type that represents the position of a cell within a 2D grid.
Definition: navmeshtypes.h:30
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
std::int32_t KyInt32
int32_t
Definition: types.h:24