Fix validity check to account for drop moves.
[tagua/yd.git] / src / hlvariant / chess / move.cpp
blobcd20549e439beb8f429a81ebb29a3f4f8987c088
1 #include "move.h"
3 namespace HLVariant {
4 namespace Chess {
6 Move::Move(const Point& from, const Point& to, int promotionType)
7 : m_type(NORMAL)
8 , m_from(from)
9 , m_to(to)
10 , m_promotion(promotionType) { }
12 Move::Move()
13 : m_type(INVALID)
14 , m_from(Point::invalid())
15 , m_to(Point::invalid())
16 , m_promotion(-1) { }
18 Move::~Move() { }
20 Point Move::enPassantTrigger() const {
21 if (m_type == EN_PASSANT_TRIGGER) {
22 return (m_from + m_to) / 2;
24 else {
25 return Point::invalid();
29 Point Move::captureSquare() const {
30 if (m_type == EN_PASSANT_CAPTURE) {
31 return Point(m_to.x, m_from.y);
33 else {
34 return m_to;
38 int Move::promoteTo() const {
39 if (m_type == PROMOTION) {
40 return m_promotion;
42 else {
43 return -1;
47 bool Move::kingSideCastling() const {
48 return m_type == KING_SIDE_CASTLING;
51 bool Move::queenSideCastling() const {
52 return m_type == QUEEN_SIDE_CASTLING;
55 Point Move::from() const {
56 return m_from;
59 Point Move::to() const {
60 return m_to;
63 bool Move::valid() const {
64 return //m_from != Point::invalid() &&
65 m_to != Point::invalid() &&
66 m_type != INVALID;
69 void Move::setType(Type type) {
70 m_type = type;
73 bool Move::operator==(const Move& move) const {
74 return m_type == move.m_type &&
75 m_from == move.m_from &&
76 m_to == move.m_to &&
77 m_promotion == move.m_promotion;
80 } // namespace Chess
81 } // namespace HLVariant