Skip to content

Commit 5f8e72d

Browse files
author
Leviscus Tempris
committed
Resolve alignment of Game Over Tie UI.
1 parent 2052cb5 commit 5f8e72d

File tree

4 files changed

+74
-44
lines changed

4 files changed

+74
-44
lines changed

Script/Package/Win64/install.nsi

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ Section "Start Menu Shortcuts" SecShortcutsStart
9797
SetOutPath "$INSTDIR"
9898

9999
; Add the start menu shortcuts
100-
CreateShortCut "$SMPROGRAMS\${PROJECT_NAME_FULL}\${PROJECT_NAME_FULL}.lnk" "$INSTDIR\${PROJECT_NAME_SHORT}.exe" "" "$INSTDIR\${PROJECT_NAME_SHORT}.exe" 0 SW_SHOWMINIMIZED
100+
CreateShortCut "$SMPROGRAMS\${PROJECT_NAME_FULL}\${PROJECT_NAME_FULL}.lnk" "$INSTDIR\${PROJECT_NAME_SHORT}.exe" "" "$INSTDIR\${PROJECT_NAME_SHORT}.exe" 0
101101
CreateShortCut "$SMPROGRAMS\${PROJECT_NAME_FULL}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
102102
SectionEnd
103103

src/Game.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@ void Game::handleEvent(const sf::Event& event) {
6969
handlePlayingState(event);
7070
}
7171
else if (state == GameState::GameOver) {
72-
ui.handleGameOverState(event);
72+
if (winner == PlayerType::None) {
73+
ui.handleGameOverTieState(event);
74+
}
75+
else {
76+
ui.handleGameOverState(event);
77+
}
7378
if (ui.isMainMenuButtonReleased()) {
7479
state = GameState::MainMenu;
7580
}

src/UI.cpp

+62-41
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,47 @@ UI::UI(sf::RenderWindow& window, sf::Font& font)
1111
quitButton(std::make_unique<Button>(0, 0, 225, 50, font, "Quit")),
1212
resumeButton(std::make_unique<Button>(0, 0, 225, 50, font, "Resume")),
1313
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")) {
1516
}
1617

17-
void UI::initializeElements() {
18+
void UI::initializeElementsMainMenu() {
1819
try {
1920
startButton->center(window, 25);
2021
startClassicButton->center(window, 100);
2122
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 {
2231
resumeButton->center(window, -50);
2332
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 {
2441
mainMenuGameOverButton->center(window, 125);
42+
mainMenuGameOverTieButton->center(window, 50);
2543
}
2644
catch (const std::exception& e) {
2745
std::cerr << "Failed to initialize UI elements: " << e.what() << std::endl;
2846
}
2947
}
3048

49+
void UI::initializeElements() {
50+
initializeElementsMainMenu();
51+
initializeElementsPauseMenu();
52+
initializeElementsGameOver();
53+
}
54+
3155
void UI::handleMainMenu(const sf::Event& event) {
3256
try {
3357
startButton->update(sf::Mouse::getPosition(window), event);
@@ -58,6 +82,15 @@ void UI::handleGameOverState(const sf::Event& event) {
5882
}
5983
}
6084

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+
6194
void UI::drawMainMenu() {
6295
sf::Sprite sprite;
6396
sprite.setTexture(Resource::getInstance().getBrandTexture());
@@ -77,52 +110,40 @@ void UI::drawPauseMenu() {
77110
}
78111

79112
void UI::drawGameOverState(PlayerType winner) {
80-
bool useText = false;
81-
82113
// Create the background panel
83114
sf::RectangleShape backgroundPanel;
84115

85116
backgroundPanel.setFillColor(sf::Color(0, 0, 0, 220));
86117

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);
95120

96121
// Draw the background panel
97122
window.draw(backgroundPanel);
98123

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());
117132
}
118133
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) {
119144
sf::Sprite playerSprite;
120-
sf::Sprite winSprite;
121145

122-
if (winner == PlayerType::None) {
123-
winSprite.setTexture(Resource::getInstance().getTieTexture());
124-
}
125-
else if (winner == PlayerType::Player1) {
146+
if (winner == PlayerType::Player1) {
126147
winSprite.setColor(sf::Color(255, 30, 38));
127148
winSprite.setTexture(Resource::getInstance().getWinTexture());
128149
playerSprite.setTexture(Resource::getInstance().getXTexture());
@@ -136,13 +157,13 @@ void UI::drawGameOverState(PlayerType winner) {
136157
playerSprite.setScale(sf::Vector2f(0.25f, 0.25f));
137158
playerSprite.setPosition((window.getSize().x - playerSprite.getLocalBounds().width * 0.25f) * 0.5f, window.getSize().y * 0.5f - 150.0f);
138159

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-
142160
window.draw(playerSprite);
143-
window.draw(winSprite);
161+
162+
mainMenuGameOverButton->draw(window);
163+
}
164+
else {
165+
mainMenuGameOverTieButton->draw(window);
144166
}
145-
mainMenuGameOverButton->draw(window);
146167

147168
}
148169

@@ -163,5 +184,5 @@ bool UI::isResumeButtonReleased() {
163184
}
164185

165186
bool UI::isMainMenuButtonReleased() {
166-
return mainMenuPauseButton->isReleased() || mainMenuGameOverButton->isReleased();
187+
return mainMenuPauseButton->isReleased() || mainMenuGameOverButton->isReleased() || mainMenuGameOverTieButton->isReleased();
167188
}

src/UI.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@ class UI {
99
public:
1010
UI(sf::RenderWindow& window, sf::Font& font);
1111

12+
void initializeElementsMainMenu();
13+
void initializeElementsPauseMenu();
14+
void initializeElementsGameOver(float offsetY = 0.0f);
1215
void initializeElements();
1316
void handleMainMenu(const sf::Event& event);
1417
void handlePauseMenu(const sf::Event& event);
1518
void handleGameOverState(const sf::Event& event);
16-
void drawMainMenuTextLogo();
19+
void handleGameOverTieState(const sf::Event& event);
1720
void drawMainMenu();
1821
void drawPauseMenu();
1922
void drawGameOverState(PlayerType winner);
@@ -33,6 +36,7 @@ class UI {
3336
std::unique_ptr<IButton> resumeButton;
3437
std::unique_ptr<IButton> mainMenuPauseButton;
3538
std::unique_ptr<IButton> mainMenuGameOverButton;
39+
std::unique_ptr<IButton> mainMenuGameOverTieButton;
3640
};
3741

3842
#endif // UI_H

0 commit comments

Comments
 (0)