-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGameManager.cpp
More file actions
103 lines (86 loc) · 2.99 KB
/
GameManager.cpp
File metadata and controls
103 lines (86 loc) · 2.99 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
//
// Created by vb-jakub on 20.06.24.
//
#include "GameManager.h"
#include "Player.h"
#include "Board.h"
#include "GameView.h"
#include "FlyingLogs.h"
#include "GameHUD.h"
#include "GameController.h"
#include <SFML/Audio.hpp>
#include <iostream>
GameManager::GameManager(sf::RenderWindow &windowRef) : window(windowRef) {}
void GameManager::play() const{
while (window.isOpen()) {
MenuScreen menu(window);
bool reset=false;
sf::Event event;
while(window.isOpen() and !reset) {
while(window.pollEvent(event)) {
if(event.type==sf::Event::Closed) window.close();
if(menu.modeIsChosen()) menu.controlSelectSkin(event);
else menu.controllMenu(event);
}
window.clear();
if(menu.modeIsChosen()) menu.drawSelectSkin();
else menu.drawMenu();
window.display();
if(menu.isSkinChoosen()) playGame(event,reset,menu);
}
}
}
void GameManager::playGame(sf::Event &event, bool &reset,const MenuScreen &menu) const {
sf::Clock clock;
float elapseTime=0.0f;
float timeAfterDead=0.0f;
bool soundIsPlayed=false;
sf::SoundBuffer soundBuffer;
if(!soundBuffer.loadFromFile("sounds/death.wav"))
std::cerr << "ERROR: Death sound didn't open." << std::endl;
sf::Sound deathSound(soundBuffer);
Player player(menu.getGameMode());
Board board(player,8);
GameView view(window,elapseTime,player,board,menu.getPlayerSkin());
FlyingLogs logs(window);
GameHUD hud(window,player,board);
GameController controller(player,board);
while(window.isOpen() and !reset) {
float deltaTime=clock.restart().asSeconds();
if(board.getGameState()==RUNNING and controller.isGameStarted())
elapseTime+=deltaTime;
if(board.getGameState()==FINISHED) {
timeAfterDead+=deltaTime;
if(!soundIsPlayed) deathSound.play();
soundIsPlayed=true;
}
while (window.pollEvent(event)) {
if(event.type==sf::Event::Closed) window.close();
controller.play(event, elapseTime,logs);
}
window.clear();
view.draw();
if(controller.isGameStarted()){
board.checkTimeRemaining(elapseTime);
logs.updateAndDraw();
}
else view.drawStartCaption();
hud.draw(elapseTime);
window.display();
if(timeAfterDead>=1.5f) {
RecordsScreen records(window,view,player.getGameMode(),player.getScore());
playRecordsScreen(event,reset,records);
}
}
}
void GameManager::playRecordsScreen(sf::Event &event, bool &reset, RecordsScreen &records) const {
while (window.isOpen() and !reset) {
while(window.pollEvent(event)) {
if(event.type==sf::Event::Closed) window.close();
records.controllRecordScreen(event,reset);
}
window.clear();
records.drawRecordsScreen();
window.display();
}
}