Last active
February 20, 2020 08:15
Revisions
-
native-m revised this gist
Feb 20, 2020 . 1 changed file with 26 additions and 24 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,5 +1,4 @@ #include <iostream> using Hx::ECS::ECSContext; using Hx::ECS::EntityManager; @@ -11,35 +10,40 @@ 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<PlayableSystem>, public Observer<PlayableSystem> { void Initialize(const EventManager& eventMgr) override { eventMgr.RegisterObserver<KeyboardEvent>(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<Playable>()) { 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 } } } @@ -48,8 +52,8 @@ struct PlayableSystem : public System<PlayableSystem> class MyWorld : public World { public: MyWorld(ECSContext& ctx) : World(ctx) { EntityManager& Entities = GetEntityManager(); @@ -69,7 +73,6 @@ class MyWorld : public World void Update(double dt) override { } void Render(double dt) override @@ -86,8 +89,7 @@ ctx.RegisterSystem<PlayableSystem>(); 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); -
native-m revised this gist
Feb 20, 2020 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -86,7 +86,7 @@ ctx.RegisterSystem<PlayableSystem>(); MyWorld world(ctx); // .. update function ctx.BroadcastEvents(this->GetInputEvents()); // send input events to ecs world.Update(dt); // .. render function -
native-m revised this gist
Feb 20, 2020 . No changes.There are no files selected for viewing
-
native-m created this gist
Feb 20, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,93 @@ #include <iostream> #include "Hx.hpp" 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::Resource::ResourceManager; using Hx::Input::Keyboard; struct Playable { Playable() {} }; struct PlayableSystem : public System<PlayableSystem> { void Update(EntityManager& entities, EventManager& events, double dt) override { for(Entity e : entities.WithComponent<Playable>()) // retrieves entities with Playable components { KeyboardEvent kb; if(events.PopEvent<KeyboardEvent>(kb) == KeyboardEvent::EventID) // KeyboardEvent? { 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<Position2D>(50, 50); e.Assign<Direction2D>(0, 0); e.Assign<Sprite2D>(ResourceManager::LoadImage("ent0.png")); e.Assign<Playable>(true); // entity 2 e = this->Entities.Create(); e.Assign<Position2D>(100, 50); e.Assign<Direction2D>(0, 0); e.Assign<Sprite2D>(ResourceManager::LoadImage("ent1.png")); } void Update(double dt) override { GetContext().Update<PlayableSystem>(); } void Render(double dt) override { GetContext().Update<Sprite2DSystem>(); } }; // .. game initialization ECSContext ctx; ctx.RegisterSystem<Sprite2DSystem>(); ctx.RegisterSystem<PlayableSystem>(); MyWorld world(ctx); // .. update function ctx.BroadcastEvents(this->GetEvents()); world.Update(dt); // .. render function world.Render(dt);