/* BoardDecorator class module stores different effects to the BaseBoard caused by special actions More documentation on baseboard.h */ #ifndef _BOARDDECORATOR_H_ #define _BOARDDECORATOR_H_ #include "board.h" #include "subscriptions.h" #include <vector> #include <memory> class Subject; class BiquadrisModel; class BoardDecorator: public Board { protected: std::shared_ptr<Board> component; public: BoardDecorator(std::shared_ptr<Board> component, BiquadrisModel *model); virtual ~BoardDecorator(); virtual std::shared_ptr<Board> nextComponent(); virtual void move(char direction, int n, int weight); virtual void drop(); virtual void placeCurrBlock(); virtual void replaceCurrBlock(char type, bool safety = true); virtual int getLevel() const noexcept; virtual int getWidth() const noexcept; virtual int getHeight() const noexcept; virtual int getBoardId() const noexcept; virtual char getNextBlock() const noexcept; virtual int getLastNumLinesCleared() const noexcept; virtual char getType(int row, int col); virtual std::string getHint(); virtual void hint(); virtual std::shared_ptr<Board> getComponent(); virtual Block* getBlock(int row, int col); virtual void drawBlock(int row, int col, Block *block); virtual void eraseBlock(int row, int col); virtual void rotate(bool isClockwise, int n, int weight); virtual void levelUp(); virtual void levelDown(); virtual void setSequence(std::string file); virtual void setRandom(bool r); virtual void restart(); }; #endif