X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=examples%2Fbassteroids%2Fsource%2Fphysics.cpp;h=158b745ca83f6e0af19597e7fc7e4df9876e8365;hb=423b49f2857f8e1597b652bfd41dbf3ae45f7ec5;hp=3c435026e925b057b9eaf7ee3987bd08793153c5;hpb=4014851ac2ed8e86b5a781dcc3056088d40465a1;p=libs%2Fgame.git diff --git a/examples/bassteroids/source/physics.cpp b/examples/bassteroids/source/physics.cpp index 3c43502..158b745 100644 --- a/examples/bassteroids/source/physics.cpp +++ b/examples/bassteroids/source/physics.cpp @@ -1,5 +1,5 @@ #include "physics.h" -#include +#include #include #include "physicalentity.h" @@ -11,7 +11,12 @@ Physics::Physics(Game::Stage &s): event_source(stage.get_event_bus()), observer(stage.get_event_bus()) { + declare_dependency(UPDATE); + declare_dependency(UPDATE); + declare_dependency(READ_OLD); + observer.observe([this](auto &e){ entity_added(e); }); + observer.observe([this](auto &e){ entity_removed(e); }); stage.synthesize_initial_events(observer); } @@ -36,6 +41,27 @@ void Physics::entity_added(const Game::Events::EntityCreated &e) } } +void Physics::entity_removed(const Game::Events::EntityDestroyed &e) +{ + if(Game::Handle physical = dynamic_handle_cast(e.entity)) + { + auto i = find_member(entities, physical, &SimulatedEntity::entity); + if(i!=entities.end()) + { + size_t index = distance(entities.begin(), i); + if(index