SetImpulse event
This commit is contained in:
@@ -9,11 +9,11 @@ namespace dd
|
||||
namespace Events
|
||||
{
|
||||
|
||||
struct Contact : Event
|
||||
struct SetImpulse : Event
|
||||
{
|
||||
EntityID Entity;
|
||||
glm::vec2 Direction;
|
||||
float Strength;
|
||||
glm::vec2 Impulse;
|
||||
glm::vec2 Point;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -11,7 +11,9 @@
|
||||
#include "Core/CTransform.h"
|
||||
#include "Transform/TransformSystem.h"
|
||||
#include "Physics/EContact.h"
|
||||
#include "Physics/ESetImpulse.h"
|
||||
#include "Physics/CCircleShape.h"
|
||||
#include "Core/EventBroker.h"
|
||||
|
||||
|
||||
namespace dd
|
||||
@@ -32,6 +34,9 @@ public:
|
||||
|
||||
~PhysicsSystem();
|
||||
|
||||
EventRelay<PhysicsSystem, Events::SetImpulse> m_SetImpulse;
|
||||
bool SetImpulse(const Events::SetImpulse &event);
|
||||
|
||||
void RegisterComponents(ComponentFactory* cf) override;
|
||||
void Initialize() override;
|
||||
|
||||
|
||||
@@ -21,6 +21,25 @@ void dd::Systems::PhysicsSystem::Initialize()
|
||||
|
||||
|
||||
m_PhysicsWorld->SetContactListener(m_ContactListener);
|
||||
|
||||
EVENT_SUBSCRIBE_MEMBER(m_SetImpulse, PhysicsSystem::SetImpulse);
|
||||
}
|
||||
|
||||
bool dd::Systems::PhysicsSystem::SetImpulse(const Events::SetImpulse &event)
|
||||
{
|
||||
b2Body* body = m_EntitiesToBodies[event.Entity];
|
||||
|
||||
b2Vec2 impulse;
|
||||
impulse.x = event.Impulse.x;
|
||||
impulse.y = event.Impulse.y;
|
||||
|
||||
b2Vec2 point;
|
||||
point.x = event.Point.x;
|
||||
point.y = event.Point.y;
|
||||
|
||||
body->ApplyLinearImpulse(impulse, point, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void dd::Systems::PhysicsSystem::Update(double dt)
|
||||
|
||||
Reference in New Issue
Block a user