-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwinner_screen_sfml.cpp
96 lines (88 loc) · 2.15 KB
/
winner_screen_sfml.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
86
87
88
89
90
91
92
93
94
95
96
#include <string>
#include "game_sfml.h"
#include "winner_screen_sfml.h"
winner_screen_sfml::winner_screen_sfml(
sf::RenderWindow& w,
int winner,
const bool do_play_music)
: m_do_play_music{do_play_music},
m_menu(),
m_state{program_state::winner},
m_window{w},
m_winner_text{create_winner_text(winner)}
{
}
void winner_screen_sfml::display()
{
//Clear
m_window.clear();
//Text
m_window.draw(m_winner_text);
//Show
m_window.display();
}
sf::Text create_winner_text(const int winner)
{
static sf::Font font; //Text cannot be drawn if Font goes out of scope
font.loadFromFile("arial.ttf");
sf::Text winner_text;
winner_text.setFont(font);
winner_text.setPosition(sf::Vector2f(70, 225));
winner_text.setCharacterSize(75);
#if SFML_VERSION_MINOR > 3
winner_text.setFillColor(sf::Color::Yellow);
#else
winner_text.setColor(sf::Color::Yellow);
#endif
if(winner == -1)
{
winner_text.setCharacterSize(65);
winner_text.setString("Everybody Lost!");
}
else
{
std::string winner_number = std::to_string(winner);
sf::String winner_player = "Player " + winner_number + " wins!";
winner_text.setString(winner_player);
}
return winner_text;
}
void winner_screen_sfml::execute()
{
assert(m_state == program_state::winner);
while(m_window.isOpen()) {
sf::Event event;
while(m_window.pollEvent(event))
{
process_event(event);
}
display();
//Quit
if(m_state == program_state::quit) return;
//Go back to first menu
if(m_state == program_state::choose_n_players) return;
//Stay here
assert(m_state == program_state::winner);
}
}
void winner_screen_sfml::process_event(const sf::Event& event)
{
switch(event.type) //!OCLINT will not switch on all cases: there are too many of those
{
case sf::Event::Closed:
m_state = program_state::quit;
break;
case sf::Event::KeyPressed:
if(sf::Keyboard::isKeyPressed(sf::Keyboard::N))
{
m_state = program_state::choose_n_players;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{
m_state = program_state::quit;
}
break;
default:
break;
}
}