forked from SaConway/Super-Red
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MainMenu.cpp
131 lines (98 loc) · 3.23 KB
/
MainMenu.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
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
#include "MainMenu.h"
#include "Resource.h"
//-----------------------------------------------------------------------------
// C-tor of Menu
MainMenu::MainMenu(RenderWindow & window)
: Menu(window), m_info_manager(window)
{
Vector2f pos_by_pixel;
Vector2i size_of_pic, pos_in_pic;
//fit backgorund to screen size
m_background.setTexture(Resource::getInstance().getTexture(TextureID::_T_MenuBackground));
m_background.scale(getScaledBackgoundSize(*m_background.getTexture()));
//Play button definition
pos_by_pixel = { ((float)VideoMode::getDesktopMode().width / 2) - 128, (float)VideoMode::getDesktopMode().height / 2 + 128 };
pos_in_pic = { 1024,256 };
size_of_pic = { BUTTONS_SIZE * 2 , BUTTONS_SIZE };
auto play = make_shared <Button>(pos_by_pixel, size_of_pic, pos_in_pic, [this] {});
m_buttons.emplace_back(play);
//Exit button definition
pos_by_pixel = { (float)VideoMode::getDesktopMode().width - 110, (float)VideoMode::getDesktopMode().height - 105 };
pos_in_pic = { 256,256 };
size_of_pic = { BUTTONS_SIZE, BUTTONS_SIZE };
auto exit = make_shared <Button>(pos_by_pixel, size_of_pic, pos_in_pic, [this] { exitGame(); });
exit->setScale({ 0.8f, 0.75f });
m_buttons.emplace_back(exit);
//Info button definition
pos_by_pixel = { 10, (float)VideoMode::getDesktopMode().height - 105 };
pos_in_pic = { 128,256 };
auto info = make_shared <Button>(pos_by_pixel, size_of_pic, pos_in_pic, [this] { runInfo(); });
info->setScale({ 0.8f, 0.75f });
m_buttons.emplace_back(info);
//Clouds definition
for (int i = 0; i < NUM_OF_CLOUDS; i++)
m_cloud[i] = make_unique<Cloud>();
}
//-----------------------------------------------------------------------------
/* This function run main menu */
op_main_menu MainMenu::runMenu()
{
op_main_menu event;
while (true)
{
displayMenu();
mouseOnButton((Vector2f)Mouse::getPosition());
updateClouds();
if ((event = eventHandler()) != _DisplayMainMenu)
return event;
}
}
//-----------------------------------------------------------------------------
/* This function display menu */
void MainMenu::displayMenu() const
{
m_window.setView(m_window.getDefaultView()); // update to default view
m_window.clear();
m_window.draw(m_background);
for (auto i : m_buttons) i->draw(m_window);
for (int i = 0; i < NUM_OF_CLOUDS; ++i)
m_cloud[i]->draw(m_window);
m_window.display();
}
//-----------------------------------------------------------------------------
/* This function handle eventes of main menu */
op_main_menu MainMenu::eventHandler()
{
Event event;
while (m_window.pollEvent(event))
{
switch (event.type)
{
case Event::MouseButtonPressed:
{
Vector2f mouse_location((float)event.mouseButton.x, (float)event.mouseButton.y);
if (m_buttons[_Play]->checkIfPressed(mouse_location))
{
m_buttons[_Play]->handlePress();
return _Play;
}
if (m_buttons[_Escape]->checkIfPressed(mouse_location))
{
m_buttons[_Escape]->handlePress();
return _Escape;
}
if (m_buttons[_Info]->checkIfPressed(mouse_location))
{
m_buttons[_Info]->handlePress();
}
}
case Event::KeyPressed:
if (event.key.code == Keyboard::Escape) {
exitGame();
return _Escape;
}
}
}
displayMenu();
return _DisplayMainMenu;
}