Kemena3D
Loading...
Searching...
No Matches
kemena::kNavManager Class Reference

Owns a dtCrowd and a dtTileCache update loop for a single kNavMesh. More...

#include <knavmanager.h>

Public Member Functions

 kNavManager (kNavMesh *mesh, int maxAgents=128)
 Constructs a navigation manager for a baked navmesh.
 ~kNavManager ()
 Destroys the manager, shutting down the crowd and freeing agents/obstacles.
bool init ()
 Initialises the internal dtCrowd.
void shutdown ()
 Shuts down crowd and releases all agents / obstacles.
void update (float deltaTime)
 Steps the crowd simulation and rebuilds any dirty tiles.
kNavAgentaddAgent (const kVec3 &position, const kNavAgentConfig &config={})
 Adds a new crowd agent at position.
void removeAgent (kNavAgent *agent)
 Removes and destroys an agent.
const std::vector< kNavAgent * > & getAgents () const
 All currently active agents.
kNavObstacleaddObstacle (const kVec3 &position, float radius, float height)
 Adds a dynamic cylinder obstacle.
void removeObstacle (kNavObstacle *obstacle)
 Removes and destroys a dynamic obstacle.
const std::vector< kNavObstacle * > & getObstacles () const
 All currently registered obstacles.
kNavMeshgetNavMesh () const
 Returns the kNavMesh this manager was created with.

Detailed Description

Owns a dtCrowd and a dtTileCache update loop for a single kNavMesh.

Typical usage:

kNavMesh* mesh = new kNavMesh();
mesh->bake(verts, tris, config);
kNavAgent* hero = nav->addAgent(startPos, {});
hero->setTarget(goalPos);
kNavObstacle* barrel = nav->addObstacle(barrelPos, 0.4f, 1.2f);
// game loop:
nav->update(deltaTime);
kVec3 pos = hero->getPosition();
A single crowd agent managed by kNavManager.
Definition knavagent.h:63
kVec3 getPosition() const
Current world-space position of the agent.
bool setTarget(const kVec3 &target)
Sets the movement target on the navmesh.
kNavAgent * addAgent(const kVec3 &position, const kNavAgentConfig &config={})
Adds a new crowd agent at position.
kNavObstacle * addObstacle(const kVec3 &position, float radius, float height)
Adds a dynamic cylinder obstacle.
void update(float deltaTime)
Steps the crowd simulation and rebuilds any dirty tiles.
kNavManager(kNavMesh *mesh, int maxAgents=128)
Constructs a navigation manager for a baked navmesh.
A baked navigation mesh used for pathfinding and obstacle simulation.
Definition knavmesh.h:140
bool bake(const std::vector< float > &verts, const std::vector< int > &tris, const kNavBuildConfig &config={}, const std::vector< kNavLink > &links={})
Builds the navigation mesh from raw triangle geometry.
A dynamic cylinder obstacle carved into the navmesh at runtime.
Definition knavobstacle.h:31
KEMENA3D_API kNavManager * createNavManager(kNavMesh *mesh, int maxAgents=128)
Create and initialise a navigation manager for a navigation mesh.
glm::vec3 kVec3
3-component float vector.
Definition kdatatype.h:33

Constructor & Destructor Documentation

◆ kNavManager()

kemena::kNavManager::kNavManager ( kNavMesh * mesh,
int maxAgents = 128 )

Constructs a navigation manager for a baked navmesh.

Parameters
meshA successfully baked kNavMesh. The manager holds a non-owning pointer — the mesh must outlive the manager.
maxAgentsMaximum simultaneous crowd agents (default 128).

◆ ~kNavManager()

kemena::kNavManager::~kNavManager ( )

Destroys the manager, shutting down the crowd and freeing agents/obstacles.

Member Function Documentation

◆ addAgent()

kNavAgent * kemena::kNavManager::addAgent ( const kVec3 & position,
const kNavAgentConfig & config = {} )

Adds a new crowd agent at position.

Returns
Pointer owned by the manager, or nullptr if the crowd is full.

◆ addObstacle()

kNavObstacle * kemena::kNavManager::addObstacle ( const kVec3 & position,
float radius,
float height )

Adds a dynamic cylinder obstacle.

Requires the navmesh to have been built with tileSize > 0. Returns nullptr for single-mesh builds.

Parameters
positionWorld-space centre (bottom) of the cylinder.
radiusCylinder radius (m).
heightCylinder height (m).

◆ getAgents()

const std::vector< kNavAgent * > & kemena::kNavManager::getAgents ( ) const

All currently active agents.

◆ getNavMesh()

kNavMesh * kemena::kNavManager::getNavMesh ( ) const

Returns the kNavMesh this manager was created with.

◆ getObstacles()

const std::vector< kNavObstacle * > & kemena::kNavManager::getObstacles ( ) const

All currently registered obstacles.

◆ init()

bool kemena::kNavManager::init ( )

Initialises the internal dtCrowd.

Returns
false if the mesh is not baked or dtCrowd allocation failed.

◆ removeAgent()

void kemena::kNavManager::removeAgent ( kNavAgent * agent)

Removes and destroys an agent.

The pointer is invalid after this call.

◆ removeObstacle()

void kemena::kNavManager::removeObstacle ( kNavObstacle * obstacle)

Removes and destroys a dynamic obstacle.

The pointer is invalid after this call.

◆ shutdown()

void kemena::kNavManager::shutdown ( )

Shuts down crowd and releases all agents / obstacles.

◆ update()

void kemena::kNavManager::update ( float deltaTime)

Steps the crowd simulation and rebuilds any dirty tiles.

Parameters
deltaTimeFrame time in seconds.

The documentation for this class was generated from the following file: