Repository navigation
Expand file tree
/
Copy pathGame.cpp
More file actions
107 lines (102 loc) · 3 KB
/
Copy pathGame.cpp
File metadata and controls
107 lines (102 loc) · 3 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "Game.h"
Game::Game() : m_window(std::vector<sf::VideoMode>(sf::VideoMode::getFullscreenModes())[0], "Post-Ironic Aesthetic Experience", sf::Style::Fullscreen),
m_menu(m_window.getSize()), m_currentLevel(0), m_playerState(Player::PLAYER_IN_MENU)
{
setCursor();
m_window.setMouseCursorGrabbed(true);
m_window.setFramerateLimit(60);
}
int Game::setCursor()
{
if (!m_iCursor.loadFromFile("resources\\cursor.png"))
return Error::ERROR_GAME_LOADING_CURSOR;
m_cursor.loadFromPixels(m_iCursor.getPixelsPtr(), m_iCursor.getSize(), { 0,0 });
m_window.setMouseCursor(m_cursor);
return 0;
}
void Game::eventLoop()
{
while (m_window.isOpen())
{
sf::Event event;
while (m_window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
m_window.close();
break;
case sf::Event::GainedFocus:
m_window.setMouseCursorGrabbed(true);
break;
case sf::Event::LostFocus:
m_window.setMouseCursorGrabbed(false);
break;
case sf::Event::KeyPressed:
if (event.key.code == sf::Keyboard::Escape)
{
m_playerState = Player::PLAYER_IN_MENU;
m_levels.clear();
}
break;
case sf::Event::MouseMoved:
if (m_menu.getPlayBoundingBox().contains(event.mouseMove.x, event.mouseMove.y))
m_menu.setPlayActive(true);
else
m_menu.setPlayActive(false);
if (m_menu.getOptionsBoundingBox().contains(event.mouseMove.x, event.mouseMove.y))
m_menu.setOptionsActive(true);
else
m_menu.setOptionsActive(false);
if (m_menu.getExitBoundingBox().contains(event.mouseMove.x, event.mouseMove.y))
m_menu.setExitActive(true);
else
m_menu.setExitActive(false);
break;
case sf::Event::MouseButtonPressed:
if (event.mouseButton.button == sf::Mouse::Left)
{
if (m_playerState == Player::PLAYER_IN_MENU)
{
sf::Vector2i mousePosition = sf::Mouse::getPosition(m_window);
if (m_menu.getPlayBoundingBox().contains(static_cast<sf::Vector2f>(mousePosition)))
{
m_playerState = Player::PLAYER_IN_GAME;
m_levels.push_back(std::move(Level(m_window, "resources\\levels\\level_1.png", "resources\\levels\\level_1_track.png", "resources\\levels\\level_1_data.txt")));
m_levels[m_currentLevel].setScale(sf::Vector2f((static_cast<double>(m_window.getSize().x) / m_levels[m_currentLevel].getSize().x),
(static_cast<double>(m_window.getSize().y) / m_levels[m_currentLevel].getSize().y)));
m_clock.restart();
}
else if (m_menu.getExitBoundingBox().contains(static_cast<sf::Vector2f>(mousePosition)))
m_window.close();
}
}
break;
default:
break;
}
}
display();
}
}
void Game::display()
{
m_window.clear();
switch (m_playerState)
{
case Player::PLAYER_IN_MENU:
m_menu.rescaleButtons(1.1f);
m_window.draw(m_menu);
break;
case Player::PLAYER_IN_GAME:
m_window.draw(m_levels[m_currentLevel]);
for (Wave& wave : m_levels[m_currentLevel].getWaves())
{
wave.release(m_clock);
m_window.draw(wave);
}
default:
break;
}
m_window.display();
}