#ifndef KS_PIECE_H #define KS_PIECE_H #include #include "base/piece.h" class KSPieceInfo : public GPieceInfo { public: KSPieceInfo() : _oldRotationStyle(false) {} void setOldRotationStyle(bool oldStyle) { _oldRotationStyle = oldStyle; } virtual uint nbBlocks() const { return NB_BLOCKS; } virtual uint nbForms() const { return NB_FORMS; } virtual uint nbTypes() const { return NB_FORMS; } virtual const int *i(uint form, uint rot) const { return (_oldRotationStyle ? FORMS[form].oi[rot] : FORMS[form].i[rot]); } virtual const int *j(uint form, uint rot) const { return (_oldRotationStyle ? FORMS[form].oj[rot] : FORMS[form].j[rot]); } virtual uint value(uint type, uint) const { return type; } virtual uint form(uint type) const { return type; } virtual uint nbConfigurations(uint type) const { return FORMS[type].nbConfigs; } virtual uint nbNormalBlockTypes() const { return NB_FORMS; } virtual uint nbGarbageBlockTypes() const { return 1; } virtual uint nbBlockModes() const { return 1; } virtual uint nbColors() const { return NB_FORMS + 1; } virtual TQString colorLabel(uint i) const { return i18n(COLOR_LABELS[i]); } virtual TQColor defaultColor(uint i) const; private: virtual void draw(TQPixmap *, uint blockType, uint blockMode, bool lighted) const; private: bool _oldRotationStyle; enum { NB_BLOCKS = 4, NB_FORMS = 7 }; struct Form { int i[4][NB_BLOCKS]; // new rotation style int j[4][NB_BLOCKS]; int oi[4][NB_BLOCKS]; // old rotation style int oj[4][NB_BLOCKS]; uint nbConfigs; // number of unique configs }; static const Form FORMS[NB_FORMS]; static const char *COLOR_LABELS[NB_FORMS+1]; static const char *DEFAULT_COLORS[NB_FORMS+1]; }; #endif