@@ -11,23 +11,47 @@ UI::UI(sf::RenderWindow& window, sf::Font& font)
11
11
quitButton(std::make_unique<Button>(0 , 0 , 225 , 50 , font, " Quit" )),
12
12
resumeButton(std::make_unique<Button>(0 , 0 , 225 , 50 , font, " Resume" )),
13
13
mainMenuPauseButton(std::make_unique<Button>(0 , 0 , 225 , 50 , font, " Main Menu" )),
14
- mainMenuGameOverButton(std::make_unique<Button>(0 , 0 , 225 , 50 , font, " Main Menu" )) {
14
+ mainMenuGameOverButton(std::make_unique<Button>(0 , 0 , 225 , 50 , font, " Main Menu" )),
15
+ mainMenuGameOverTieButton(std::make_unique<Button>(0 , 0 , 225 , 50 , font, " Main Menu" )) {
15
16
}
16
17
17
- void UI::initializeElements () {
18
+ void UI::initializeElementsMainMenu () {
18
19
try {
19
20
startButton->center (window, 25 );
20
21
startClassicButton->center (window, 100 );
21
22
quitButton->center (window, 175 );
23
+ }
24
+ catch (const std::exception & e) {
25
+ std::cerr << " Failed to initialize UI elements: " << e.what () << std::endl;
26
+ }
27
+ }
28
+
29
+ void UI::initializeElementsPauseMenu () {
30
+ try {
22
31
resumeButton->center (window, -50 );
23
32
mainMenuPauseButton->center (window, 50 );
33
+ }
34
+ catch (const std::exception & e) {
35
+ std::cerr << " Failed to initialize UI elements: " << e.what () << std::endl;
36
+ }
37
+ }
38
+
39
+ void UI::initializeElementsGameOver (float offsetY) {
40
+ try {
24
41
mainMenuGameOverButton->center (window, 125 );
42
+ mainMenuGameOverTieButton->center (window, 50 );
25
43
}
26
44
catch (const std::exception & e) {
27
45
std::cerr << " Failed to initialize UI elements: " << e.what () << std::endl;
28
46
}
29
47
}
30
48
49
+ void UI::initializeElements () {
50
+ initializeElementsMainMenu ();
51
+ initializeElementsPauseMenu ();
52
+ initializeElementsGameOver ();
53
+ }
54
+
31
55
void UI::handleMainMenu (const sf::Event& event) {
32
56
try {
33
57
startButton->update (sf::Mouse::getPosition (window), event);
@@ -58,6 +82,15 @@ void UI::handleGameOverState(const sf::Event& event) {
58
82
}
59
83
}
60
84
85
+ void UI::handleGameOverTieState (const sf::Event& event) {
86
+ try {
87
+ mainMenuGameOverTieButton->update (sf::Mouse::getPosition (window), event);
88
+ }
89
+ catch (const std::exception & e) {
90
+ std::cerr << " Error handling game over state event: " << e.what () << std::endl;
91
+ }
92
+ }
93
+
61
94
void UI::drawMainMenu () {
62
95
sf::Sprite sprite;
63
96
sprite.setTexture (Resource::getInstance ().getBrandTexture ());
@@ -77,52 +110,40 @@ void UI::drawPauseMenu() {
77
110
}
78
111
79
112
void UI::drawGameOverState (PlayerType winner) {
80
- bool useText = false ;
81
-
82
113
// Create the background panel
83
114
sf::RectangleShape backgroundPanel;
84
115
85
116
backgroundPanel.setFillColor (sf::Color (0 , 0 , 0 , 220 ));
86
117
87
- if (useText) {
88
- backgroundPanel.setSize (sf::Vector2f (250 .0f , 250 .0f ));
89
- backgroundPanel.setPosition ((window.getSize ().x * 0 .5f - backgroundPanel.getSize ().x * 0 .5f ), window.getSize ().y * 0 .5f - backgroundPanel.getSize ().y * 0 .5f );
90
- }
91
- else {
92
- backgroundPanel.setSize (sf::Vector2f (250 .0f , 350 .0f ));
93
- backgroundPanel.setPosition ((window.getSize ().x * 0 .5f - backgroundPanel.getSize ().x * 0 .5f ), window.getSize ().y * 0 .5f - backgroundPanel.getSize ().y * 0 .5f );
94
- }
118
+ backgroundPanel.setSize (sf::Vector2f (250 .0f , winner == PlayerType::None ? 225 .0f : 350 .0f ));
119
+ backgroundPanel.setPosition ((window.getSize ().x * 0 .5f - backgroundPanel.getSize ().x * 0 .5f ), window.getSize ().y * 0 .5f - backgroundPanel.getSize ().y * 0 .5f );
95
120
96
121
// Draw the background panel
97
122
window.draw (backgroundPanel);
98
123
99
- if (useText) {
100
- sf::Text winText;
101
- winText.setFont (Resource::getInstance ().getFont ());
102
- winText.setCharacterSize (50 );
103
- if (winner == PlayerType::None) {
104
- winText.setString (" Tie Game!" );
105
- winText.setFillColor (sf::Color::White); // White for a tie
106
- }
107
- else if (winner == PlayerType::Player1) {
108
- winText.setString (" X Wins!" );
109
- winText.setFillColor (sf::Color::Red); // Red for Player 1
110
- }
111
- else {
112
- winText.setString (" O Wins!" );
113
- winText.setFillColor (sf::Color::Blue); // Blue for Player 2
114
- }
115
- winText.setPosition ((window.getSize ().x - winText.getLocalBounds ().width ) * 0 .5f , window.getSize ().y * 0 .5f - 100 .0f );
116
- window.draw (winText);
124
+ sf::Sprite winSprite;
125
+
126
+ if (winner == PlayerType::None) {
127
+ winSprite.setTexture (Resource::getInstance ().getTieTexture ());
128
+ }
129
+ else if (winner == PlayerType::Player1) {
130
+ winSprite.setColor (sf::Color (255 , 30 , 38 ));
131
+ winSprite.setTexture (Resource::getInstance ().getWinTexture ());
117
132
}
118
133
else {
134
+ winSprite.setColor (sf::Color (22 , 200 , 255 ));
135
+ winSprite.setTexture (Resource::getInstance ().getWinTexture ());
136
+ }
137
+
138
+ winSprite.setScale (sf::Vector2f (0 .375f , 0 .375f ));
139
+ winSprite.setPosition ((window.getSize ().x - winSprite.getLocalBounds ().width * 0 .375f ) * 0 .5f , window.getSize ().y * 0 .5f + (winner == PlayerType::None ? -75 .0f : 0 .0f ));
140
+
141
+ window.draw (winSprite);
142
+
143
+ if (winner != PlayerType::None) {
119
144
sf::Sprite playerSprite;
120
- sf::Sprite winSprite;
121
145
122
- if (winner == PlayerType::None) {
123
- winSprite.setTexture (Resource::getInstance ().getTieTexture ());
124
- }
125
- else if (winner == PlayerType::Player1) {
146
+ if (winner == PlayerType::Player1) {
126
147
winSprite.setColor (sf::Color (255 , 30 , 38 ));
127
148
winSprite.setTexture (Resource::getInstance ().getWinTexture ());
128
149
playerSprite.setTexture (Resource::getInstance ().getXTexture ());
@@ -136,13 +157,13 @@ void UI::drawGameOverState(PlayerType winner) {
136
157
playerSprite.setScale (sf::Vector2f (0 .25f , 0 .25f ));
137
158
playerSprite.setPosition ((window.getSize ().x - playerSprite.getLocalBounds ().width * 0 .25f ) * 0 .5f , window.getSize ().y * 0 .5f - 150 .0f );
138
159
139
- winSprite.setScale (sf::Vector2f (0 .375f , 0 .375f ));
140
- winSprite.setPosition ((window.getSize ().x - winSprite.getLocalBounds ().width * 0 .375f ) * 0 .5f , window.getSize ().y * 0 .5f );
141
-
142
160
window.draw (playerSprite);
143
- window.draw (winSprite);
161
+
162
+ mainMenuGameOverButton->draw (window);
163
+ }
164
+ else {
165
+ mainMenuGameOverTieButton->draw (window);
144
166
}
145
- mainMenuGameOverButton->draw (window);
146
167
147
168
}
148
169
@@ -163,5 +184,5 @@ bool UI::isResumeButtonReleased() {
163
184
}
164
185
165
186
bool UI::isMainMenuButtonReleased () {
166
- return mainMenuPauseButton->isReleased () || mainMenuGameOverButton->isReleased ();
187
+ return mainMenuPauseButton->isReleased () || mainMenuGameOverButton->isReleased () || mainMenuGameOverTieButton-> isReleased () ;
167
188
}
0 commit comments