#define PHYSICS_H_
#include <msp/game/eventobserver.h>
+#include <msp/game/eventsource.h>
#include <msp/game/events.h>
#include <msp/game/handle.h>
#include <msp/game/system.h>
#include <msp/geometry/angle.h>
#include <msp/linal/vector.h>
+#include "events.h"
class PhysicalEntity;
class Physics: public Msp::Game::System
{
+public:
+ using EventSource = Msp::Game::EventSource<Events::Collision>;
+
private:
struct SimulatedEntity
{
Msp::Game::Handle<PhysicalEntity> entity;
float inverse_mass = 1.0f;
- float moment_of_inertia = 1.0f;
+ float inverse_momi = 1.0f;
Msp::LinAl::Vector<float, 2> external_force;
float external_torque = 0.0f;
Msp::LinAl::Vector<float, 2> normal;
};
+ EventSource event_source;
Msp::Game::EventObserver observer;
std::vector<SimulatedEntity> entities;
unsigned fixture_count = 0;
private:
void entity_added(const Msp::Game::Events::EntityCreated &);
+ void entity_removed(const Msp::Game::Events::EntityDestroyed &);
public:
void tick(Msp::Time::TimeDelta) override;