From 87970bfc4be75847039513e0bf22d06d2dcfa1f8 Mon Sep 17 00:00:00 2001 From: zv0n Date: Sun, 25 Apr 2021 13:57:33 +0200 Subject: [PATCH] SDLPP: Visitor pattern --- sdlpp/sdlpp_renderobject.cpp | 5 ++++- sdlpp/sdlpp_renderobject.hpp | 4 +++- sdlpp/sdlpp_visitor.hpp | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 sdlpp/sdlpp_visitor.hpp diff --git a/sdlpp/sdlpp_renderobject.cpp b/sdlpp/sdlpp_renderobject.cpp index 090e70d..2d1412c 100644 --- a/sdlpp/sdlpp_renderobject.cpp +++ b/sdlpp/sdlpp_renderobject.cpp @@ -105,7 +105,7 @@ void RenderObject::addMovement( double x, double y ) { void RenderObject::setMovement( double x, double y ) { movementDirection = { x, y }; } -Vec2D RenderObject::getMovement() { +Vec2D< double > RenderObject::getMovement() { return movementDirection; } void RenderObject::resetMovementX() { @@ -237,4 +237,7 @@ void RenderObject::setAnimationSpeed( const double fps ) { animation_fps = fps; animation_next_frame = animation_next_frame_base = 1000 / fps; } +void RenderObject::visit( Visitor &visitor ) { + visitor.visit( *this ); +} } // namespace SDLPP diff --git a/sdlpp/sdlpp_renderobject.hpp b/sdlpp/sdlpp_renderobject.hpp index 31002ec..0e9c133 100644 --- a/sdlpp/sdlpp_renderobject.hpp +++ b/sdlpp/sdlpp_renderobject.hpp @@ -6,6 +6,7 @@ #include "sdlpp_renderer.hpp" #include "sdlpp_texture.hpp" #include "sdlpp_vector.hpp" +#include "sdlpp_visitor.hpp" #include #include @@ -65,7 +66,7 @@ public: void setMovementSpeed( double speed ); void addMovement( double x, double y ); void setMovement( double x, double y ); - Vec2D getMovement(); + Vec2D< double > getMovement(); void resetMovementX(); void resetMovementY(); void clearColided(); @@ -101,6 +102,7 @@ public: void resumeAnimation(); void removeAnimation(); void animate( int ticks ); + void visit( Visitor &visitor ); protected: virtual void copyTo( std::shared_ptr< RenderObject > other ); diff --git a/sdlpp/sdlpp_visitor.hpp b/sdlpp/sdlpp_visitor.hpp new file mode 100644 index 0000000..75b6640 --- /dev/null +++ b/sdlpp/sdlpp_visitor.hpp @@ -0,0 +1,18 @@ +#ifndef SDLPP_HPP_VISITOR +#define SDLPP_HPP_VISITOR + +#include "sdlpp_common.hpp" + +namespace SDLPP { + +class SDLPPSCOPE RenderObject; + +class SDLPPSCOPE Visitor { +public: + Visitor() {} + virtual void visit( const RenderObject &obj ); +}; + +} // namespace SDLPP + +#endif