-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathChessController.cpp
85 lines (75 loc) · 2.68 KB
/
ChessController.cpp
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "ChessController.hpp"
#include "ChessGame.hpp"
#include "Graphics/ChessGraphicsSystem.hpp"
#include "Square.hpp"
// --------------------------------------------------------------------------------------------------------------------
ChessController::ChessController() {
mGraphicsSystem = new ChessGraphicsSystem(this);
mGame = new ChessGame();
}
// --------------------------------------------------------------------------------------------------------------------
ChessController::~ChessController() {
delete mGraphicsSystem;
delete mGame;
}
// --------------------------------------------------------------------------------------------------------------------
void ChessController::HandleClick(int row, int col)
{
if (mGame->GetState() == mGame->ACTIVE)
{
if(row == -1 || col == -1 || (row == mSelectedPieceRow && col == mSelectedPieceCol))
{
DeselectSelectedPiece();
mGraphicsSystem->Render(mGame->GetBoard(), {});
return;
}
if (!HasSelectedPiece())
{
if (!mValidMoves[row][col].empty())
{
auto highlightedMoves = mValidMoves[row][col];
mSelectedPieceCol = col;
mSelectedPieceRow = row;
// Renderer highlights moves
mGraphicsSystem->Render(mGame->GetBoard(), highlightedMoves);
return;
} else {
mGraphicsSystem->Render(mGame->GetBoard(), {});
}
}
else
{
for (auto mv : mValidMoves[mSelectedPieceRow][mSelectedPieceCol])
{
if (mv.mEnd->GetRow() == row && mv.mEnd->GetCol() == col)
{
mGame->TakeTurn(mv);
mValidMoves = mGame->GetLegalMoves();
mGraphicsSystem->Render(mGame->GetBoard(), {});
return;
}
}
DeselectSelectedPiece();
// Renderer renders over highlighted moves if there are any
HandleClick(row, col);
return;
}
}
}
// --------------------------------------------------------------------------------------------------------------------
void ChessController::Start()
{
mValidMoves = mGame->GetLegalMoves();
DeselectSelectedPiece();
mGraphicsSystem->RunChessGame(mGame->GetBoard());
}
// --------------------------------------------------------------------------------------------------------------------
bool ChessController::HasSelectedPiece() {
return (mSelectedPieceCol != -1 && mSelectedPieceRow != -1);
}
// --------------------------------------------------------------------------------------------------------------------
void ChessController::DeselectSelectedPiece() {
mSelectedPieceCol = -1;
mSelectedPieceRow = -1;
}
// --------------------------------------------------------------------------------------------------------------------