biquadris / boardDecorator.h
boardDecorator.h
Raw
/*
    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