Program Listing for File physics_system.h¶
↰ Return to documentation for file (rootex/framework/systems/physics_system.h
)
#pragma once
#include "core/physics/debug_drawer.h"
#include "entity.h"
#include "framework/system.h"
#include "btBulletDynamicsCommon.h"
#include "BulletCollision/CollisionDispatch/btGhostObject.h"
enum PhysicsMaterial
{
Air = 0,
Water = 1,
Wood = 2,
End
};
struct PhysicsMaterialData
{
float restitution = 1.0f;
float friction = 1.0f;
float specificGravity = 1.0f;
};
class PhysicsSystem : public System
{
Ptr<btDynamicsWorld> m_DynamicsWorld;
Ptr<btBroadphaseInterface> m_Broadphase;
Ptr<btCollisionDispatcher> m_Dispatcher;
Ptr<btConstraintSolver> m_Solver;
Ptr<btDefaultCollisionConfiguration> m_CollisionConfiguration;
Ptr<btGhostPairCallback> m_GhostPairCallback;
DebugDrawer m_DebugDrawer;
Vector<PhysicsMaterialData> m_PhysicsMaterialTable;
String m_PhysicsMaterialNames;
PhysicsSystem();
void assignPhysicsMaterials();
public:
static PhysicsSystem* GetSingleton();
static void InternalTickCallback(btDynamicsWorld* const world, btScalar const timeStep);
virtual ~PhysicsSystem();
bool initialize(const JSON::json& systemData) override;
void addRigidBody(btRigidBody* body, int group, int mask);
void removeRigidBody(btRigidBody* rigidBody);
void addCollisionObject(btCollisionObject* body, int group, int mask);
void removeCollisionObject(btCollisionObject* collisionObject);
const PhysicsMaterialData& getMaterialData(PhysicsMaterial material);
const char* getMaterialNames();
btCollisionWorld::AllHitsRayResultCallback reportAllRayHits(const btVector3& m_From, const btVector3& m_To);
btCollisionWorld::ClosestRayResultCallback reportClosestRayHits(const btVector3& m_From, const btVector3& m_To);
void debugDrawComponent(const btTransform& worldTransform, const btCollisionShape* shape, const btVector3& color);
void update(float deltaMilliseconds) override;
};