Collision callbacks
This commit is contained in:
@@ -27,6 +27,8 @@
|
||||
|
||||
void Systems::PhysicsSystem::Initialize()
|
||||
{
|
||||
|
||||
|
||||
m_Accumulator = 0;
|
||||
|
||||
// Events
|
||||
@@ -102,6 +104,8 @@ void Systems::PhysicsSystem::Initialize()
|
||||
SetupVisualDebugger(m_Context);
|
||||
|
||||
m_PhysicsWorld->unmarkForWrite();
|
||||
|
||||
m_collisionResolution = new MyCollisionResolution;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -324,9 +328,11 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
|
||||
m_PhysicsWorld->markForWrite();
|
||||
vehicleSetup.buildVehicle(m_World, m_PhysicsWorld, *m_Vehicles[entity], entity, m_Wheels);
|
||||
// Add the vehicle's entities and phantoms to the world
|
||||
rigidBody->addContactListener( m_collisionResolution );
|
||||
m_Vehicles[entity]->addToWorld(m_PhysicsWorld);
|
||||
|
||||
m_RigidBodies[entity] = rigidBody;
|
||||
m_collisionResolution->m_RigidBodies[rigidBody] = entity;
|
||||
|
||||
|
||||
// The vehicle is an action
|
||||
m_PhysicsWorld->addAction(m_Vehicles[entity]);
|
||||
@@ -340,8 +346,10 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
|
||||
else
|
||||
{
|
||||
m_PhysicsWorld->markForWrite();
|
||||
rigidBody->addContactListener( m_collisionResolution );
|
||||
m_PhysicsWorld->addEntity(rigidBody);
|
||||
m_RigidBodies[entity] = rigidBody;
|
||||
m_collisionResolution->m_RigidBodies[rigidBody] = entity;
|
||||
m_PhysicsWorld->unmarkForWrite();
|
||||
|
||||
shape->removeReference();
|
||||
@@ -394,6 +402,7 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
|
||||
m_PhysicsWorld->markForWrite();
|
||||
m_PhysicsWorld->addEntity(rigidBody);
|
||||
m_RigidBodies[entity] = rigidBody;
|
||||
m_collisionResolution->m_RigidBodies[rigidBody] = entity;
|
||||
m_PhysicsWorld->unmarkForWrite();
|
||||
|
||||
shape->removeReference();
|
||||
|
||||
@@ -60,9 +60,27 @@
|
||||
#include "Physics/VehicleSetup.h"
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
#include <Physics2012/Dynamics/Collide/ContactListener/hkpContactListener.h>
|
||||
|
||||
class MyCollisionResolution: public hkReferencedObject, public hkpContactListener
|
||||
{
|
||||
public:
|
||||
std::unordered_map<hkpRigidBody*, EntityID> m_RigidBodies;
|
||||
|
||||
virtual void contactPointCallback( const hkpContactPointEvent& event )
|
||||
{
|
||||
|
||||
EntityID entity1 = m_RigidBodies[event.getBody(0)];
|
||||
EntityID entity2 = m_RigidBodies[event.getBody(1)];
|
||||
LOG_INFO("Entities colliding: %i, %i ", entity1, entity2);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
namespace Systems
|
||||
{
|
||||
|
||||
class PhysicsSystem : public System
|
||||
{
|
||||
public:
|
||||
@@ -77,7 +95,7 @@ public:
|
||||
void OnComponentCreated(std::string type, std::shared_ptr<Component> component) override;
|
||||
void OnComponentRemoved(std::string type, Component* component) override;
|
||||
void OnEntityCommit(EntityID entity) override;
|
||||
|
||||
|
||||
private:
|
||||
double m_Accumulator;
|
||||
hkpWorld* m_PhysicsWorld;
|
||||
@@ -145,8 +163,9 @@ private:
|
||||
hkpMoppBvTreeShape* MoppShape;
|
||||
};
|
||||
std::unordered_map<EntityID, ExtendedShapeData > m_ExtendedMeshShapes;
|
||||
|
||||
MyCollisionResolution* m_collisionResolution;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // PhysicsSystem_h__
|
||||
|
||||
Reference in New Issue
Block a user