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