From 060820248368d1d15a74005d64288f1753abdfb7 Mon Sep 17 00:00:00 2001 From: zvon Date: Sat, 7 Aug 2021 21:58:53 +0200 Subject: [PATCH] SDLPP: add option to specify background objects in scene and move Z index of objects just above those background objects --- sdlpp/sdlpp_scene.cpp | 16 ++++++++++++++++ sdlpp/sdlpp_scene.hpp | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/sdlpp/sdlpp_scene.cpp b/sdlpp/sdlpp_scene.cpp index 96d97a4..cb737c6 100644 --- a/sdlpp/sdlpp_scene.cpp +++ b/sdlpp/sdlpp_scene.cpp @@ -69,6 +69,9 @@ void Scene::moveZTop( const std::shared_ptr< RenderObject > &obj ) { void Scene::moveZBottom( const std::shared_ptr< RenderObject > &obj ) { setZIndex( obj, 0 ); } +void Scene::moveZJustAboveBackground( const std::shared_ptr< RenderObject > &obj ) { + setZIndex( obj, first_non_background_index ); +} std::shared_ptr< RenderObject > Scene::getObject( int index ) { return render_objects[index]; } @@ -231,6 +234,19 @@ void Scene::resetScene() { } } +void Scene::setBackgroundObjectIDs(const std::unordered_set &ids) { + background_ids = ids; +} +void Scene::updateBackgroundObjectZIndex() { + first_non_background_index = 1; + for(uint64_t i = 1; i < render_objects.size(); i++) { + if(background_ids.find(render_objects[i]->getId()) != background_ids.end()) { + setZIndex(render_objects[i], 1); + first_non_background_index++; + } + } +} + void Scene::checkKilled() { std::lock_guard< std::mutex > lock( render_mutex ); std::vector< int > killed; diff --git a/sdlpp/sdlpp_scene.hpp b/sdlpp/sdlpp_scene.hpp index 7161351..de80e7a 100644 --- a/sdlpp/sdlpp_scene.hpp +++ b/sdlpp/sdlpp_scene.hpp @@ -22,6 +22,7 @@ public: void moveZ( const std::shared_ptr< RenderObject > &obj, int addition ); void moveZTop( const std::shared_ptr< RenderObject > &obj ); void moveZBottom( const std::shared_ptr< RenderObject > &obj ); + void moveZJustAboveBackground( const std::shared_ptr< RenderObject > &obj ); std::shared_ptr< RenderObject > getObject( int index ); std::vector< std::shared_ptr< RenderObject > > getObjects(); std::vector< std::shared_ptr< RenderObject > > @@ -49,6 +50,8 @@ public: void setPrevTicks( int ticks ); void saveScene(); void resetScene(); + void setBackgroundObjectIDs(const std::unordered_set &ids); + void updateBackgroundObjectZIndex(); private: void checkKilled(); @@ -64,6 +67,8 @@ private: std::shared_ptr< RenderObject > rightmost_obj; uint64_t max_object_id = 0; std::mutex render_mutex; + std::unordered_set background_ids; + uint64_t first_non_background_index = 1; }; } // end of namespace SDLPP #endif