summaryrefslogtreecommitdiffstats
path: root/ksirtet/ksirtet/piece.h
blob: 25d866c4b904a6334cefcee0e37eb9b7ffd089c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#ifndef KS_PIECE_H
#define KS_PIECE_H

#include <klocale.h>
#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 QString colorLabel(uint i) const { return i18n(COLOR_LABELS[i]); }
    virtual QColor defaultColor(uint i) const;

 private:
    virtual void draw(QPixmap *, 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