From 7206dbf7c3bbc5c3a062b495c4c2928f223ccc91 Mon Sep 17 00:00:00 2001 From: zv0n Date: Sun, 25 Apr 2021 16:07:46 +0200 Subject: [PATCH] SDLPP: Scene - add visitCollisions function --- sdlpp/sdlpp_renderobject.cpp | 2 +- sdlpp/sdlpp_renderobject.hpp | 2 +- sdlpp/sdlpp_scene.cpp | 5 +++++ sdlpp/sdlpp_scene.hpp | 2 ++ sdlpp/sdlpp_visitor.hpp | 2 +- 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/sdlpp/sdlpp_renderobject.cpp b/sdlpp/sdlpp_renderobject.cpp index 2d1412c..142122c 100644 --- a/sdlpp/sdlpp_renderobject.cpp +++ b/sdlpp/sdlpp_renderobject.cpp @@ -126,7 +126,7 @@ std::vector< std::shared_ptr< RenderObject > > &RenderObject::getColidedWith() { void RenderObject::setId( uint64_t input_id ) { id = input_id; } -uint64_t RenderObject::getId() { +uint64_t RenderObject::getId() const { return id; } void RenderObject::setHidden( bool hid ) { diff --git a/sdlpp/sdlpp_renderobject.hpp b/sdlpp/sdlpp_renderobject.hpp index 0e9c133..d975301 100644 --- a/sdlpp/sdlpp_renderobject.hpp +++ b/sdlpp/sdlpp_renderobject.hpp @@ -73,7 +73,7 @@ public: void addColided( std::shared_ptr< RenderObject > &obj ); std::vector< std::shared_ptr< RenderObject > > &getColidedWith(); void setId( uint64_t input_id ); - uint64_t getId(); + uint64_t getId() const; void setHidden( bool hid ); bool getHidden() const; void destroy(); diff --git a/sdlpp/sdlpp_scene.cpp b/sdlpp/sdlpp_scene.cpp index 6752e0a..d57df2c 100644 --- a/sdlpp/sdlpp_scene.cpp +++ b/sdlpp/sdlpp_scene.cpp @@ -107,6 +107,11 @@ Scene::getCollisions( RenderObject &r ) { } return ret; } +void Scene::visitCollisions( RenderObject &r, Visitor &v ) { + for(auto &collision : getCollisions(r)) { + collision->visit(v); + } +} std::vector< std::shared_ptr< RenderObject > > Scene::getCollisions( RenderObject &r, const std::unordered_set< int > &objectIDs ) { diff --git a/sdlpp/sdlpp_scene.hpp b/sdlpp/sdlpp_scene.hpp index 949f03e..035b881 100644 --- a/sdlpp/sdlpp_scene.hpp +++ b/sdlpp/sdlpp_scene.hpp @@ -9,6 +9,7 @@ #include "sdlpp_common.hpp" #include "sdlpp_renderer.hpp" #include "sdlpp_renderobject.hpp" +#include "sdlpp_visitor.hpp" namespace SDLPP { class SDLPPSCOPE Scene { @@ -28,6 +29,7 @@ public: void updateScene(); std::vector< std::shared_ptr< RenderObject > > getCollisions( RenderObject &r ); + void visitCollisions( RenderObject &r, Visitor &v ); std::vector< std::shared_ptr< RenderObject > > getCollisions( RenderObject &r, const std::unordered_set< int > &objectIDs ); diff --git a/sdlpp/sdlpp_visitor.hpp b/sdlpp/sdlpp_visitor.hpp index 75b6640..b88885e 100644 --- a/sdlpp/sdlpp_visitor.hpp +++ b/sdlpp/sdlpp_visitor.hpp @@ -10,7 +10,7 @@ class SDLPPSCOPE RenderObject; class SDLPPSCOPE Visitor { public: Visitor() {} - virtual void visit( const RenderObject &obj ); + virtual void visit( const RenderObject &obj ) = 0; }; } // namespace SDLPP