Files
game/sdlpp/sdlpp_scene.hpp
T

79 lines
3.0 KiB
C++
Raw Normal View History

2020-11-21 20:57:40 +01:00
#ifndef SDLPP_HPP_SCENE
#define SDLPP_HPP_SCENE
#include <algorithm>
#include <memory>
#include <mutex>
#include <unordered_set>
#include "sdlpp_common.hpp"
#include "sdlpp_renderer.hpp"
#include "sdlpp_renderobject.hpp"
2021-04-25 16:07:46 +02:00
#include "sdlpp_visitor.hpp"
2020-11-21 20:57:40 +01:00
namespace SDLPP {
2020-11-22 23:37:55 +01:00
class SDLPPSCOPE Scene {
2020-11-21 20:57:40 +01:00
public:
Scene( std::shared_ptr< Renderer > &r );
void addObject( const std::shared_ptr< RenderObject > &obj );
2021-08-07 12:13:03 +02:00
void setZIndex( const std::shared_ptr< RenderObject > &obj, uint64_t index );
2020-11-21 20:57:40 +01:00
void moveDownZ( const std::shared_ptr< RenderObject > &obj );
void moveUpZ( const std::shared_ptr< RenderObject > &obj );
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 );
2020-11-21 20:57:40 +01:00
std::shared_ptr< RenderObject > getObject( int index );
std::vector< std::shared_ptr< RenderObject > > getObjects();
std::vector< std::shared_ptr< RenderObject > >
getObjects( const std::unordered_set< int > &objectIDs );
2021-03-07 14:06:55 +01:00
void updateScene();
2022-09-24 22:51:32 +02:00
void pauseScene();
void unpauseScene();
2021-04-26 21:57:31 +02:00
std::vector< std::pair< uint64_t, std::shared_ptr< RenderObject > > >
2020-11-21 20:57:40 +01:00
getCollisions( RenderObject &r );
2021-04-25 16:07:46 +02:00
void visitCollisions( RenderObject &r, Visitor &v );
2021-04-26 21:57:31 +02:00
std::vector< std::pair< uint64_t, std::shared_ptr< RenderObject > > >
2020-11-21 20:57:40 +01:00
getCollisions( RenderObject &r,
const std::unordered_set< int > &objectIDs );
void renderScene( bool clear_renderer = true );
void presentScene();
void setBackground( std::shared_ptr< Texture > bg );
void setBackground( const std::string &img_path );
void updateSizeAndPosition();
void moveEverything( double x, double y );
const std::shared_ptr< RenderObject > &leftmost();
const std::shared_ptr< RenderObject > &rightmost();
Vec2D< int > getDimensions() const;
2020-11-21 20:57:40 +01:00
int getWidth() const;
int getHeight() const;
Renderer &getRenderer();
std::shared_ptr< Renderer > getRendererShared();
void setPrevTicks( int ticks );
void saveScene();
void resetScene();
void setBackgroundObjectIDs(const std::unordered_set<uint64_t> &ids);
void updateBackgroundObjectZIndex();
2020-11-21 20:57:40 +01:00
private:
void checkKilled();
std::vector< std::shared_ptr< RenderObject > > render_objects;
std::vector< std::shared_ptr< RenderObject > > collision_objects;
std::vector< std::shared_ptr< RenderObject > > saved_render_objects;
std::vector< std::shared_ptr< RenderObject > > saved_collision_objects;
std::shared_ptr< Renderer > renderer;
std::shared_ptr< Texture > background;
int prev_ticks = 0;
2022-09-24 22:51:32 +02:00
int diff_ticks = 0;
2020-11-21 20:57:40 +01:00
std::shared_ptr< RenderObject > leftmost_obj;
std::shared_ptr< RenderObject > rightmost_obj;
uint64_t max_object_id = 0;
std::mutex render_mutex;
std::unordered_set<uint64_t> background_ids;
uint64_t first_non_background_index = 1;
2022-09-24 22:51:32 +02:00
bool paused = false;
2020-11-21 20:57:40 +01:00
};
} // end of namespace SDLPP
#endif