game/mario/blocks.hpp

91 lines
2.7 KiB
C++
Raw Normal View History

2021-04-25 20:42:55 +00:00
#ifndef BLOCKS_H
#define BLOCKS_H
#include "../sdlpp/sdlpp_rectrenderer.hpp"
#include <memory>
2021-05-31 12:03:11 +00:00
struct LandType {
enum Value { OVERWORLD = 0, UNDERWORLD = 1, WATER = 2, BOWSER = 4 };
};
2021-05-02 12:14:11 +00:00
class MarioBlock : public SDLPP::RectangleRender {
public:
MarioBlock( int x, int y,
const std::shared_ptr< SDLPP::Renderer > &renderer,
std::shared_ptr< SDLPP::Texture > texture, SDL_Rect src,
bool can_be_destroyed = false, bool destructible = false );
2021-05-02 12:14:11 +00:00
void visit( SDLPP::Visitor &visitor ) override;
2021-05-08 22:46:10 +00:00
void setTool( bool tool = true );
void setTerrain( bool terrain = true );
2021-05-25 20:05:50 +00:00
void bounce();
void custom_move( int ticks ) override;
void setType( LandType::Value type );
2021-05-31 12:03:11 +00:00
LandType::Value getType() const;
virtual void onScrollUp() {}
virtual void onScrollDown() {}
virtual uint8_t getData() {
return 0;
}
virtual void setData( uint8_t /*UNUSED*/ ) {}
// handle own visitor
virtual void handleVisitor(SDLPP::Visitor &visitor) {}
bool hasCoin();
bool hasMushroom();
void removeCoin();
void removeMushroom();
void setCoinCount( int coins );
void setDestructible( bool destructible = true );
void ensureCollision();
2021-07-24 18:50:24 +00:00
bool isBouncing();
protected:
double bounce_speed = 0.5;
int bounce_ticks = 100;
2021-05-08 22:46:10 +00:00
2021-05-02 12:14:11 +00:00
private:
bool _tool = false;
bool _terrain = true;
2021-05-23 22:07:40 +00:00
bool _destructible = false;
bool _can_be_destroyed = false;
2021-05-25 20:05:50 +00:00
bool _bouncing = false;
int _coins = 0;
bool _mushroom = false;
2021-07-24 18:50:24 +00:00
bool _release_coin = false;
int ticks_to_bounce = 0;
SDLPP::Vec2D< double > og_pos = {};
2021-05-31 12:03:11 +00:00
LandType::Value _type;
SDL_Rect _base_src;
virtual void setWorldTypeSrc( LandType::Value world );
2021-05-02 12:14:11 +00:00
};
2021-05-08 22:46:10 +00:00
extern const std::vector< uint64_t > possibleBlocks;
2021-05-28 17:51:02 +00:00
extern const std::vector< uint64_t > possibleMods;
extern const std::vector< uint64_t > possibleCharacters;
2021-05-31 12:03:11 +00:00
extern const std::vector< LandType::Value > possibleLands;
2021-05-08 22:43:53 +00:00
struct BlockRole {
enum Value {
TERRAIN,
MODIFIER,
CHARACTER,
MARIO,
};
};
std::shared_ptr< MarioBlock >
2021-05-08 22:46:10 +00:00
createTerrainBlock( uint64_t block_id, LandType::Value type,
std::shared_ptr< SDLPP::Renderer > &renderer,
bool destructible = false, bool editor = false );
std::shared_ptr< MarioBlock >
2021-05-08 22:46:10 +00:00
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< MarioBlock >
2021-05-08 22:46:10 +00:00
createMario( LandType::Value type, std::shared_ptr< SDLPP::Renderer > &renderer,
int x, int y, bool editor = false );
2021-04-25 20:42:55 +00:00
2021-05-08 22:46:10 +00:00
enum BlockRole::Value getBlockRole( uint64_t id );
2021-05-02 12:28:17 +00:00
2021-04-25 20:42:55 +00:00
#endif