#ifndef PIECE_H #define PIECE_H #include "base/piece.h" class FEPieceInfo : public GPieceInfo { public: FEPieceInfo() {} virtual uint nbBlocks() const { return NB_BLOCKS; } virtual uint nbForms() const { return 1; } virtual uint nbTypes() const { return NB_NORM_BLOCK_TYPES * NB_NORM_BLOCK_TYPES; } virtual const int *i(uint, uint rot) const { return FORM.i[rot]; } virtual const int *j(uint, uint rot) const { return FORM.j[rot]; } virtual uint value(uint type, uint n) const { return (n%2 ? type/4 : type%4); } virtual uint form(uint) const { return 0; } virtual uint nbConfigurations(uint type) const { return ((type%4)==(type/4) ? 2 : 4);} virtual uint nbNormalBlockTypes() const { return NB_NORM_BLOCK_TYPES; } virtual uint nbGarbageBlockTypes() const { return 1; } virtual uint nbBlockModes() const { return NB_BLOCK_MODES; } virtual uint nbColors() const { return NB_NORM_BLOCK_TYPES + 1; } virtual TQString colorLabel(uint i) const; virtual TQColor defaultColor(uint i) const; private: void draw(TQPixmap *, uint blockType, uint blockMode, bool lighted) const; void setMask(TQPixmap *, uint blockMode) const; enum { NB_BLOCKS = 2, NB_NORM_BLOCK_TYPES = 4, NB_BLOCK_MODES = 1+4+6+4+1 }; // all possible connections struct Form { int i[4][NB_BLOCKS]; int j[4][NB_BLOCKS]; }; static const Form FORM; static const char *DEFAULT_COLORS[NB_NORM_BLOCK_TYPES + 1]; }; #endif