#include using Hx::ECS::ECSContext; using Hx::ECS::EntityManager; using Hx::ECS::Entity; using Hx::ECS::World; using Hx::ECS::System; using Hx::Components::Position2D; using Hx::Components::Direction2D; using Hx::Components::Sprite2D; using Hx::Systems::Sprite2DSystem; using Hx::Events::KeyboardEvent; using Hx::Events::EventHandler; using Hx::Resource::Receiver; using Hx::Input::Keyboard; struct Playable { Playable() {} }; struct PlayableSystem : public System, public Observer { void Initialize(const EventManager& eventMgr) override { eventMgr.RegisterObserver(this->GetSystemInstance()); } void Update(EntityManager& entities, EventManager& events, double dt) override { } void Notify(EntityManager& entities, EventManager& events, const KeyboardEvent& e) { for(Entity entity : entities.WithComponents()) { switch(kb.key) // switch key { case Keyboard::W: // move entities forward case Keyboard::S: // move entities backward case Keyboard::A: // move entities left case Keyboard::D: // move entities right } } } }; class MyWorld : public World { public: MyWorld(ECSContext& ctx) : World(ctx) { EntityManager& Entities = GetEntityManager(); // entity 1 (this entity is playable) Entity e = this->Entities.Create(); e.Assign(50, 50); e.Assign(0, 0); e.Assign(ResourceManager::LoadImage("ent0.png")); e.Assign(true); // entity 2 e = this->Entities.Create(); e.Assign(100, 50); e.Assign(0, 0); e.Assign(ResourceManager::LoadImage("ent1.png")); } void Update(double dt) override { } void Render(double dt) override { GetContext().Update(); } }; // .. game initialization ECSContext ctx; ctx.RegisterSystem(); ctx.RegisterSystem(); MyWorld world(ctx); // .. update function ctx.GetEventManager().BroadcastEvents(this->GetEvents()); // Broadcast default events (keyboard events, mouse events, etc), this will notify all observers // .. render function world.Render(dt);