File indexing completed on 2024-05-12 04:04:14

0001 /*
0002  This file is part of Knights, a chess board for KDE SC 4.
0003  SPDX-FileCopyrightText: 2009-2010 Miha Čančula <miha.cancula@gmail.com>
0004 
0005  SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006 */
0007 
0008 #ifndef KNIGHTS_PIECE_H
0009 #define KNIGHTS_PIECE_H
0010 
0011 #include "pos.h"
0012 #include "item.h"
0013 
0014 namespace Knights {
0015 enum PieceType {
0016     NoType = 0,
0017     King,
0018     Queen,
0019     Bishop,
0020     Knight,
0021     Rook,
0022     Pawn,
0023     PieceTypeCount
0024 };
0025 enum Color {
0026     NoColor = 0x00,
0027     White = 0x01,
0028     Black = 0x02
0029 };
0030 
0031 Q_DECLARE_FLAGS(Colors, Color)
0032 Q_DECLARE_OPERATORS_FOR_FLAGS(Colors)
0033 Color oppositeColor ( Color color );
0034 QString colorName ( Color color );
0035 QString pieceTypeName ( PieceType type );
0036 
0037 class Piece : public Item {
0038     Q_OBJECT
0039 public:
0040     Piece ( KGameGraphicsViewRenderer* renderer, PieceType type, Color color, QGraphicsScene* scene, Pos boardPos, QGraphicsItem* parent = nullptr );
0041     ~Piece() override;
0042 
0043     PieceType pieceType();
0044     void setPieceType ( PieceType type );
0045     Color color();
0046 
0047     static QString spriteKey ( PieceType type, Color color );
0048     static PieceType typeFromChar ( QChar typeChar );
0049     static QChar charFromType ( PieceType t );
0050 
0051 private:
0052     Color m_color;
0053     PieceType m_type;
0054     void updateSpriteKey();
0055 };
0056 
0057 typedef QMap<Pos, Piece*> Grid;
0058 typedef QPair<Color, PieceType> PieceData;
0059 typedef QMap<Pos, PieceData> PieceDataMap;
0060 }
0061 
0062 Q_DECLARE_METATYPE ( Knights::Color )
0063 Q_DECLARE_METATYPE ( Knights::Colors )
0064 Q_DECLARE_METATYPE ( Knights::PieceType )
0065 Q_DECLARE_METATYPE ( Knights::PieceData )
0066 Q_DECLARE_METATYPE ( Knights::PieceDataMap )
0067 
0068 #endif // KNIGHTS_PIECE_H