-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
136 lines (114 loc) · 4.24 KB
/
main.cpp
File metadata and controls
136 lines (114 loc) · 4.24 KB
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <Chess/Includes.hpp>
int main(int argc, char* argv[])
{
sf::RenderWindow Window(sf::VideoMode(1072, 600), "Chess");
Phox::Mouse mouse;
Phox::Keyboard keyboard;
Game daGame;//John's board
GUIManager GUI;//GUI handling
Board GameBoard;//Ruck's GUI board
NetworkManager Network;
//Set stuff up
{
Window.setFramerateLimit(30);
mouse.setReferenceWindow(Window);
daGame = newGame();//John's board
GUI.init(Window);
if (!GameBoard.loadResources())
{
return -1;//If I couldn't load the textures or find files, exit.
}
GameBoard.linkGUIManager(GUI);
}
while (Window.isOpen())
{
Phox::clearIODevices(mouse, keyboard);//Clear Mouse/Keyboard states
sf::Event Event;
bool closeWindow = 0;
while (Window.pollEvent(Event))
{
if (Event.type == sf::Event::Closed) closeWindow = 1;
if (Event.type == sf::Event::KeyPressed) keyboard.tellPressed(Event.key.code);
if (Event.type == sf::Event::KeyReleased) keyboard.tellReleased(Event.key.code);
if (Event.type == sf::Event::MouseButtonPressed) mouse.tellPressed(Event.mouseButton.button);
if (Event.type == sf::Event::MouseButtonReleased) mouse.tellReleased(Event.mouseButton.button);
GUI.update(Event);//Pass the event to the GUI manager
}
mouse.update();//Update the Mouse positions
if (closeWindow)
{
Window.close();
break;
}
Window.clear(sf::Color(110, 110, 110));//Clear the window with a green color
bool myMove = !Network.isConnected();
if (!myMove)//Connected
{
if (Network.isBoardFresh())
{
std::memcpy(daGame, Network.getRefreshedBoard(), sizeof(game));
}
myMove = (Network.isHosting() && Network.isWhitesMove()) || (!Network.isHosting() && !Network.isWhitesMove());
}
GameBoard.networkDraw(Network.isConnected(), myMove, Network.getMyName(), Network.getOpponentName(), Network.getTimeServer(), Network.getTimeOpponent());
GameBoard.update(daGame, mouse.getPosition(Window), Window);//Send John's board state to Ruck's board
GameBoard.getOpponentMove(daGame, Network.reportMove());
if (Network.requestCurrentBoard())
{
Network.setCurrentBoard(daGame);
}
if (mouse.pressed(sf::Mouse::Button::Left) && myMove)//Forward a mouse click to Ruck's board
{
GameBoard.clicked(daGame, mouse.getPosition(Window));
Network.getMove(GameBoard.getNetworkMove());
}
Network.handleSignal(GUI.getNetworkSignal());//Inform the network manager of GUI events
GUI.handleSignal(Network.getGUISignal());
std::size_t New = GUI.getNewGame();
if (New)
{
if (Network.isConnected() && !Network.isHosting())
{
Phox::cStreamBuffer Buff;
Buff.writeString("Cannot start a new game while in a network game.\n");
GUI.handleSignal(Buff);
}
else
{
deleteGame(daGame);
daGame = newGame();
GameBoard.reset();
if (New == 2)
{
randomize960(daGame);
}
if (Network.isConnected())
{
GUI.saveGame(Network.getOpponentName(), Network.getTimeServer(), Network.getTimeOpponent());
if (Network.isHosting())
{
Network.refreshBoard(daGame);
}
}
else
GUI.saveGame();
}
}
GUI.draw();
if (GameBoard.getParsing())
{
sf::sleep(sf::milliseconds(GameBoard.getParsingWaitTime()));
}
Window.display();//Draw everything on the window
}
if (Network.isConnected())
{
GUI.saveGame(Network.getOpponentName(), Network.getTimeServer(), Network.getTimeOpponent());
}
else
{
GUI.saveGame();
}
deleteGame(daGame);
return 1;
}