4#pragma warning(disable: 4127)
5#pragma warning(disable: 4324)
6#pragma warning(disable: 5033)
8#include <btBulletDynamicsCommon.h>
9#include <BulletCollision/CollisionShapes/btCylinderShape.h>
14#include "EntityDefinition.h"
15#include "Services/TaskManager.h"
16#include "Systems/Core/DynamicComponentSystem.h"
18#include "Foundation/ComponentModel/Entity.h"
19#include "Foundation/Reflection/TypeDatabase.h"
20#include "Foundation/Platform/Threads.h"
23#include <unordered_map>
45 static void registerType();
61 inline btVector3 toBullet(
const glm::vec3 & v)
63 return btVector3(v.x, v.y, v.z);
66 inline btQuaternion toBullet(
const glm::quat & v)
69 b.deSerializeFloat(*
reinterpret_cast<const btQuaternionData *
>(&v));
81 static Reflection::TypeId getTypeId() {
return Reflection::TypeDatabase::getType<PhysicsManager>().getTypeId(); }
83 void addRigidBody(btRigidBody * rigidBody);
84 void removeRigidBody(btRigidBody * rigidBody);
86 void addCollisionObject(btCollisionObject * btCollisionObject);
87 void removeCollisionObject(btCollisionObject * btCollisionObject);
89 void addConstraint(btTypedConstraint * constraint);
90 void removeConstraint(btTypedConstraint * constraint);
92 void preUpdate(
Context* context);
94 void postUpdate(
Context* context);
96 void waitForASync(
Context* context);
98 constexpr Context* getContext()
noexcept {
return context; }
102 void stepSimulation(
float deltaTime);
103 void pullGhostState();
104 void pushGhostState();
109 bool ghostCallbackSet =
false;
111 std::unique_ptr<btBroadphaseInterface> broadphase;
112 std::unique_ptr<btDefaultCollisionConfiguration> collisionConfiguration;
113 std::unique_ptr<btCollisionDispatcher> dispatcher;
114 std::unique_ptr<btSequentialImpulseConstraintSolver> solver;
115 std::unique_ptr<btDiscreteDynamicsWorld> dynamicsWorld;
130template<>
inline Cogs::StringView getName<Cogs::Core::PhysicsManager>() {
return "PhysicsManager"; }
131template<>
inline Cogs::StringView getName<Cogs::Core::SizeT>() {
return "SizeT"; }
132template<>
inline Cogs::StringView getName<Cogs::Core::CollisionDetail>() {
return "CollisionDetail"; }
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Provides a weakly referenced view over the contents of a string.
std::weak_ptr< ComponentModel::Entity > WeakEntityPtr
Weak Smart pointer for Entity access.
uint16_t TypeId
Built in type used to uniquely identify a single type instance.
Contains all Cogs related functionality.
Task id struct used to identify unique Task instances.