#ifndef BLOCKS_H #define BLOCKS_H #include "../sdlpp/sdlpp_rectrenderer.hpp" #include struct LandType { enum Value { OVERWORLD = 0, UNDERWORLD = 1, WATER = 2, BOWSER = 4 }; }; class MarioBlock : public SDLPP::RectangleRender { public: MarioBlock( int x, int y, std::shared_ptr< SDLPP::Renderer > renderer, std::shared_ptr< SDLPP::Texture > texture, SDL_Rect src, bool can_be_destroyed = false, bool destructible = false ); void visit( SDLPP::Visitor &visitor ) override; void setTool( bool tool = true ); void setTerrain( bool terrain = true ); void bounce(); virtual void custom_move(int ticks) override; void setType(LandType::Value type); LandType::Value getType() const; private: bool _tool = false; bool _terrain = true; bool _destructible = false; bool _can_be_destroyed = false; bool _bouncing = false; const int bounce_ticks = 100; int ticks_to_bounce = bounce_ticks; SDLPP::Vec2D og_pos = {}; LandType::Value _type; }; extern const std::vector< uint64_t > possibleBlocks; extern const std::vector< uint64_t > possibleMods; extern const std::vector< uint64_t > possibleCharacters; extern const std::vector< LandType::Value > possibleLands; struct BlockRole { enum Value { TERRAIN, MODIFIER, CHARACTER, MARIO, }; }; std::shared_ptr< SDLPP::RectangleRender > createTerrainBlock( uint64_t block_id, LandType::Value type, std::shared_ptr< SDLPP::Renderer > &renderer, bool destructible = false, bool editor = false ); std::shared_ptr< SDLPP::RectangleRender > createTerrainBlock( uint64_t block_id, LandType::Value type, std::shared_ptr< SDLPP::Renderer > &renderer, int x, int y, bool destructible = false, bool editor = false ); std::shared_ptr< SDLPP::RectangleRender > createTerrainBlock( uint64_t block_id, LandType::Value type, std::shared_ptr< SDLPP::Renderer > &renderer, std::shared_ptr< SDLPP::Texture > texture, bool destructible = false, bool editor = false ); std::shared_ptr< SDLPP::RectangleRender > createTerrainBlock( uint64_t block_id, LandType::Value type, std::shared_ptr< SDLPP::Renderer > &renderer, int x, int y, std::shared_ptr< SDLPP::Texture > texture, bool destructible = false, bool editor = false ); std::shared_ptr< SDLPP::RectangleRender > createMario( LandType::Value type, std::shared_ptr< SDLPP::Renderer > &renderer, int x, int y ); SDL_Rect getSourceRectByID( uint64_t id, LandType::Value type ); enum BlockRole::Value getBlockRole( uint64_t id ); #endif