5 #include <unordered_map>
32 using std::unique_ptr;
186 vector<Vector3>&
path,
190 const vector<Vector3> flowMapEndPositions = vector<Vector3>(),
229 vector<unique_ptr<PathFindingThread>>
threads;
279 const string& logicId,
280 const string& actorId,
283 vector<Vector3>& path,
284 int alternativeEndSteps = 0,
286 bool createFlowMap =
false,
287 const vector<Vector3> flowMapEndPositions = vector<Vector3>(),
288 const float flowMapWidth = 0.0,
289 const float flowMapDepth = 0.0,
310 void cancel(
const string& actorId);
336 void onAddedBody(
const string&
id, Body::BodyType type, uint16_t collisionTypeId,
bool enabled,
const Transform& transform,
float restitution,
float friction,
float mass,
const Vector3& inertiaTensor,
const vector<BoundingVolume*>& boundingVolumes,
bool hierarchy =
false)
override;
337 void onRemovedBody(
const string&
id, Body::BodyType type, uint16_t collisionTypeId)
override;
338 void onAddedSubBody(
const string&
id, Body::BodyType type, uint16_t collisionTypeId,
const string& subBodyParentId,
const string& subBodyId,
const Transform& transform,
const vector<BoundingVolume*>& boundingVolumes)
override;
339 void onRemovedSubBody(
const string&
id, Body::BodyType type, uint16_t collisionTypeId,
const string& subBodyParentId,
const string& subBodyId)
override;
452 this->engine = unique_ptr<Engine>(
engine);
460 return this->engine.release();
475 this->guiEngine = unique_ptr<Engine>(
guiEngine);
483 return this->guiEngine.release();
513 this->world = unique_ptr<World>(
world);
528 this->scene = unique_ptr<Scene>(
scene);
536 return this->scene.release();
562 return logicIt !=
logicsById.end()?logicIt->second:
nullptr;
578 return newLogicsCount;
680 return doProcessPacket(logic, packet, to_string(line) + (key.length() == 0?
"":
"_" + key));
699 unsetProcessPacket(logic, packet, to_string(line) + (key.length() == 0?
"":
"_" + key));
Interface to audio module.
Context physics world listener.
void onAddedSubBody(const string &id, Body::BodyType type, uint16_t collisionTypeId, const string &subBodyParentId, const string &subBodyId, const Transform &transform, const vector< BoundingVolume * > &boundingVolumes) override
void onAddedBody(const string &id, Body::BodyType type, uint16_t collisionTypeId, bool enabled, const Transform &transform, float restitution, float friction, float mass, const Vector3 &inertiaTensor, const vector< BoundingVolume * > &boundingVolumes, bool hierarchy=false) override
ContextWorldListener(Context *context)
Constructor.
void onRemovedBody(const string &id, Body::BodyType type, uint16_t collisionTypeId) override
void onRemovedSubBody(const string &id, Body::BodyType type, uint16_t collisionTypeId, const string &subBodyParentId, const string &subBodyId) override
PathFindingCustomTest * customTest
Mutex pathFindingCancelMutex
unique_ptr< tdme::utilities::PathFinding > pathFinding
unordered_map< string, FlowMapRequest > flowMapRequests
PathFindingThread(Context *context, int idx)
Public constructor.
State findPath(const string &logicId, const string &actorId, const Vector3 &startPosition, const Vector3 &endPosition, vector< Vector3 > &path, int alternativeEndSteps=0, PathFindingCustomTest *customTest=nullptr, bool createFlowMap=false, const vector< Vector3 > flowMapEndPositions=vector< Vector3 >(), const float flowMapWidth=0.0, const float flowMapDepth=0.0, FlowMap **flowMap=nullptr)
Find path.
@ STATE_PATHFINDING_SUCCESS
@ STATE_PATHFINDING_OTHER
@ STATE_PATHFINDING_FAILED
vector< WorldActionStruct > worldActions
@ FLOWMAPEXTENSIONSTATE_REQUEST_FINISHED
@ FLOWMAPEXTENSIONSTATE_TRYLOCK_FAILED
@ FLOWMAPEXTENSIONSTATE_REQUEST_NOTFINISHED
@ FLOWMAPEXTENSIONSTATE_REQUEST_NONE
FlowMapExtensionState getFlowMapExtension(const string &actorId, FlowMap **flowMap)
Get flow map extension.
void cancel(const string &actorId)
Cancel.
vector< string > cancelActorIds
void addWorldAction(const WorldActionStruct &action)
Add world action.
void reset()
Reset current path finding.
virtual ~PathFindingThread()
Public destructor.
unique_ptr< World > world
unordered_map< string, int > actorThreadMap
void notifyCancel(const string &actorId)
Notify a cancelled actor path finding.
vector< unique_ptr< PathFindingThread > > threads
void setThreadCount(int threadCount)
Set thread count.
PathFindingThread::State findPath(const string &logicId, const string &actorId, const Vector3 &startPosition, const Vector3 &endPosition, vector< Vector3 > &path, int alternativeEndSteps=0, PathFindingCustomTest *customTest=nullptr, bool createFlowMap=false, const vector< Vector3 > flowMapEndPositions=vector< Vector3 >(), const float flowMapWidth=0.0, const float flowMapDepth=0.0, FlowMap **flowMap=nullptr)
Find path.
void start()
Start path finding.
void addWorldAction(const Context::PathFindingThread::WorldActionStruct &action)
Add world action.
Mutex actorThreadMapMutex
void shutdown()
Shutdown path finding.
void cancel(const string &actorId)
Cancel.
bool getFlowMapExtension(const string &actorId, FlowMap **flowMap)
Get flow map extension.
PathFinding(Context *context, int threadCount=0)
Public constructor.
void reset()
Reset current path finding.
Engine * unsetGUIEngine()
Unset GUI engine.
uint16_t getBodyCollisionTypeIdMask()
void setSkipOnBodyCollisionTypeIdMask(uint16_t skipOnBodyCollisionTypeIdMask)
Set body collision type id mask to skip on in path finding.
unordered_map< string, PacketState > packetStates
void setAudio(Audio *audio)
Set audio.
void setEngine(Engine *engine)
Set engine.
unique_ptr< ContextWorldListener > worldListener
virtual void initialize()
Initialize logics.
unique_ptr< Scene > scene
bool doProcessPacket(NetworkLogic *logic, LogicNetworkPacket &packet, const string &key)
Returns if to process packet or not.
unique_ptr< Engine > engine
void setWorld(World *world)
Set physics world.
void setScene(Scene *scene)
Set scene.
void unsetProcessPacket(NetworkLogic *logic, LogicNetworkPacket &packet, const string &key)
Unsets if to process packet or not.
PathFinding * getPathFinding()
Get path finding thread.
volatile bool initialized
const vector< Logic * > & getLogics()
bool doProcessPacketAtLine(NetworkLogic *logic, LogicNetworkPacket &packet, uint32_t line, const string &key=string())
Returns if to process packet or not.
Context(bool server)
Public constructor.
virtual void doneUpdateLogics()
Logics finalizations, which is called once per logics updates.
vector< Logic * > newLogics
virtual void initUpdateLogics()
Logics initialization, which is called once per logics updates.
void setGUIEngine(Engine *guiEngine)
Set GUI engine.
uint16_t bodyCollisionTypeIdCloneMask
virtual void shutdown()
Shut down logics.
static constexpr bool VERBOSE
int addNewLogics()
Add logics that have been added and tagged as new.
unordered_map< string, Logic * > logicsById
const string & getApplicationRootPathName()
Logic * getLogic(const string &id)
Get logic.
const vector< Logic * > & getNewLogics()
void setApplicationRootPathName(const string &applicationRootPathName)
Set application root path name.
void setSoundPoolSize(int soundPoolSize)
Set sound pool size.
uint16_t getBodyCollisionTypeIdCloneMask()
uint16_t bodyCollisionTypeIdMask
virtual void doneUpdateEngine()
Update engine done, which is called once per frame after calling logic updateEngine() methods.
unique_ptr< Engine > guiEngine
string applicationRootPathName
Engine * unsetEngine()
Unset engine.
void setBodyCollisionTypeIdCloneMask(uint16_t bodyCollisionTypeIdCloneMask)
Set body collision type id clone mask, which is used for path finding.
virtual ~Context()
Destructor.
void unsetProcessPacketAtLine(NetworkLogic *logic, LogicNetworkPacket &packet, uint32_t line, const string &key=string())
Unset if to process packet or not.
void setLogicsMutex(Mutex *logicsMutex)
Set logics mutex.
Scene * unsetScene()
Unset scene.
unique_ptr< World > world
uint16_t skipOnBodyCollisionTypeIdMask
uint16_t getSkipOnBodyCollisionTypeIdMask()
virtual void initUpdateEngine()
Update engine initialization, which is called once per frame before calling logic updateEngine() meth...
void setBodyCollisionTypeIdMask(uint16_t bodyCollisionTypeIdMask)
Set path finding body collision type id mask.
void addLogic(Logic *logic)
Add logic.
Dynamic physics world class.
Vector3 class representing vector3 mathematical structure and operations with x, y,...
vector< BoundingVolume * > boundingVolumes
World listener which is about notifying adding or removing bodies.
Path finding custom test interface.
#define FORBID_CLASS_COPY(CLASS)