SetImpulse event

This commit is contained in:
viktorljung
2015-09-10 22:43:25 +01:00
parent 32d7693662
commit 71cdd1f795
3 changed files with 27 additions and 3 deletions
+3 -3
View File
@@ -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;
};
}
+5
View File
@@ -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;
+19
View File
@@ -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)