-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPauseMenu.cpp
More file actions
91 lines (80 loc) · 2.69 KB
/
Copy pathPauseMenu.cpp
File metadata and controls
91 lines (80 loc) · 2.69 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
#include "PauseMenu.h"
#include "pch.h"
PauseMenu::PauseMenu(sf::RenderWindow* window, bool* isPaused)
: window(window), selectedText(nullptr), isPausedPtr(isPaused) { // Update constructor
initVariables();
initText();
}
void PauseMenu::initVariables() {
// Create semi-transparent dark background
background.setSize(sf::Vector2f(window->getSize()));
background.setFillColor(sf::Color(0, 0, 0, 128));
if (!font.loadFromFile("Fonts/metropolis/Metropolis-SemiBold.otf")) {
// Handle font loading error
throw std::runtime_error("Failed to load font");
}
}
void PauseMenu::initText() {
// Initialize resume text
resumeText.setFont(font);
resumeText.setString("Resume");
resumeText.setCharacterSize(40);
resumeText.setFillColor(sf::Color::White);
resumeText.setPosition(
window->getSize().x / 2.0f - resumeText.getGlobalBounds().width / 2.0f,
window->getSize().y / 2.0f - 50.0f
);
// Initialize exit text
exitText.setFont(font);
exitText.setString("Exit");
exitText.setCharacterSize(40);
exitText.setFillColor(sf::Color::White);
exitText.setPosition(
window->getSize().x / 2.0f - exitText.getGlobalBounds().width / 2.0f,
window->getSize().y / 2.0f + 50.0f
);
}
void PauseMenu::handleMouseMove(sf::Vector2i mousePos) {
// Reset all text colors
resumeText.setFillColor(sf::Color::White);
exitText.setFillColor(sf::Color::White);
// Check if mouse is over any text
if (isTextSelected(resumeText, mousePos)) {
resumeText.setFillColor(sf::Color::Yellow);
selectedText = &resumeText;
}
else if (isTextSelected(exitText, mousePos)) {
exitText.setFillColor(sf::Color::Yellow);
selectedText = &exitText;
}
else {
selectedText = nullptr;
}
}
void PauseMenu::handleClick(sf::Vector2i mousePos) {
if (isTextSelected(resumeText, mousePos)) {
// Resume game logic here
*isPausedPtr = false;
}
else if (isTextSelected(exitText, mousePos)) {
window->close();
}
}
bool PauseMenu::isTextSelected(const sf::Text& text, sf::Vector2i mousePos) const {
return text.getGlobalBounds().contains(window->mapPixelToCoords(mousePos));
}
void PauseMenu::update(const sf::Event& event) {
if (event.type == sf::Event::MouseMoved) {
handleMouseMove(sf::Mouse::getPosition(*window));
}
else if (event.type == sf::Event::MouseButtonPressed) {
if (event.mouseButton.button == sf::Mouse::Left) {
handleClick(sf::Mouse::getPosition(*window));
}
}
}
void PauseMenu::render() const {
window->draw(background);
window->draw(resumeText);
window->draw(exitText);
}