Coverage report for gui


src/
File: src/render/scenes/world/WorldUpdate.cpp
Date: 2024-06-25 10:57:02
Lines:
0/139
0.0%
Functions:
0/6
0.0%
Branches:
0/254
0.0%

Line Branch Exec Source
1 #include "World.hpp"
2 #include "../../core/Core.hpp"
3 #include "../../../utils/Random.hpp"
4
5 ✗ bool World::update(sf::Event event, [[maybe_unused]] sf::RenderWindow &window)
6 {
7 ✗ _worldUi.update(event, window);
8 ✗ _mousePos = _core->getMousePos() * _zoom + _view.getCenter() - _view.getSize() * (1.f/2.f);
9
10 ✗ if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
11 ✗ _core->_upperState = GameState::MENU;
12 ✗ if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space) {
13 ✗ _isDragging = false;
14 ✗ _offset = sf::Vector2f(0, 0);
15 ✗ _tmpOffset = sf::Vector2f(0, 0);
16 ✗ _selectedTile = sf::Vector2f(-1, -1);
17 }
18 ✗ if (event.type == sf::Event::MouseMoved ||
19 event.type == sf::Event::MouseButtonPressed) {
20 ✗ for (int i = 0; i < _worldSize.x; i++) {
21 ✗ for (int j = 0; j < _worldSize.y; j++) {
22 ✗ _diamond.setPosition(sf::Vector2f(
23 _chuncks[i][j]._pos.x,
24 ✗ _chuncks[i][j]._pos.y + _chuncks[i][j]._yOffset
25 ));
26 ✗ if (_diamond.checkCollision(_mousePos)) {
27 ✗ _hoveredTile = sf::Vector2f(i, j);
28 ✗ if (event.mouseButton.button == sf::Mouse::Button::Left) {
29 ✗ _selectedTile = sf::Vector2f(i, j);
30 ✗ _sounds["interact"].stop();
31 ✗ _sounds["interact"].play();
32 }
33 break;
34 }
35
36 }
37 }
38 }
39 ✗ moveMap(event);
40 ✗ return true;
41 }
42
43 ✗ void World::update(float fElapsedTime)
44 {
45 int i = 0;
46 ✗ for (auto &bubble : _bubbles) {
47 bubble.update(fElapsedTime);
48 if (bubble.isFinished())
49 ✗ _bubbles.erase(_bubbles.begin() + i);
50 ✗ i++;
51 }
52 ✗ if (_core->_server.connectionState == ServerConnect::ConnectionState::SERVERDOWN
53 ✗ || _core->_server.connectionState == ServerConnect::ConnectionState::NOTCONNECTED) {
54 ✗ _core->backToHome();
55 ✗ return;
56 }
57 ✗ if (_worldUi.getPanelState() != WorldUi::panelState::NONE)
58 ✗ _sprites["aura"]->update(_core->getDeltaTime());
59 ✗ updateTrantorians();
60 ✗ updateChuncks();
61 ✗ updateIncantation();
62 ✗ _rankTime += _core->getDeltaTime();
63 ✗ if (_rankTime > 10)
64 ✗ Ranking::getRanking(_rankings, _core->_data);
65 ✗ if (_core->_funMode)
66 ✗ for (auto &starling : _starlings)
67 ✗ starling.update(fElapsedTime);
68 }
69
70 ✗ bool World::moveMap(sf::Event event)
71 {
72 ✗ if (event.type == sf::Event::MouseWheelScrolled) {
73 ✗ if (event.mouseWheelScroll.delta > 0)
74 ✗ _zoom -= 65 * _core->getDeltaTime();
75 else
76 ✗ _zoom += 65 * _core->getDeltaTime();
77 ✗ if (_zoom < 0.25f)
78 ✗ _zoom = 0.25f;
79 ✗ if (_zoom > 2)
80 ✗ _zoom = 2;
81 ✗ _view.setSize(sf::Vector2f(1920 * _zoom, 1080 * _zoom));
82 }
83 ✗ if (event.type == sf::Event::MouseButtonPressed &&
84 event.mouseButton.button == sf::Mouse::Button::Left) {
85 ✗ _isDragging = true;
86 ✗ _dragStart = _core->getMousePos();
87 }
88 ✗ if (event.type == sf::Event::MouseButtonReleased &&
89 event.mouseButton.button == sf::Mouse::Button::Left) {
90 ✗ _isDragging = false;
91 _offset += _tmpOffset;
92 ✗ _tmpOffset = sf::Vector2f(0, 0);
93 }
94 ✗ if (_isDragging) {
95 ✗ if (_core->getMousePos().x < 0 || _core->getMousePos().x > 1920 ||
96 ✗ _core->getMousePos().y < 0 || _core->getMousePos().y > 1080) {
97 ✗ _isDragging = false;
98 _offset += _tmpOffset;
99 ✗ _tmpOffset = sf::Vector2f(0, 0);
100 ✗ return true;
101 }
102 ✗ _tmpOffset = (- _core->getMousePos() + _dragStart) * _zoom;
103 }
104 return true;
105 }
106
107 ✗ void World::updateTrantorians()
108 {
109 std::map<int, std::shared_ptr<Player>> players;
110 bool exisitingPlayers = false;
111
112 ✗ players = _core->_data.getPlayers();
113 ✗ for (auto &player : players) {
114 exisitingPlayers = false;
115 ✗ auto tile = sf::Vector2f(player.second->getPosition()[0], player.second->getPosition()[1]);
116 ✗ for (auto &trantorian : _trantorians) {
117 ✗ if (trantorian._id == player.first) {
118 exisitingPlayers = true;
119 ✗ trantorian.setTile(tile, _chuncks[tile.x][tile.y].getMiddle());
120 ✗ trantorian._level = player.second->getLvl();
121 ✗ trantorian._facing = player.second->getOrientation();
122 ✗ trantorian._inventory = player.second->getInventory();
123 ✗ if (player.second->getAlive() == false)
124 trantorian.kill();
125 break;
126 }
127 }
128 if (!exisitingPlayers) {
129 ✗ std::vector<Sprite> trantorianSprites;
130
131 ✗ Trantorian trantorian(tile, _chuncks[tile.x][tile.y].getMiddle());
132 ✗ trantorian._id = player.first;
133 ✗ trantorian._team = player.second->getTeam();
134 int teamIndex = 0;
135 ✗ for (auto &team : _teams) {
136 ✗ if (team == trantorian._team)
137 break;
138 ✗ teamIndex++;
139 }
140 ✗ trantorian._teamIndex = teamIndex;
141 ✗ _trantorians.push_back(trantorian);
142 ✗ }
143 }
144 ✗ for (auto &trantorian : _trantorians)
145 ✗ trantorian.update(_core->getDeltaTime());
146 ✗ std::optional<Broadcast> broadcast = _core->_data.getNextBroadcast();
147 ✗ if (broadcast.has_value()) {
148 ✗ if (_bubbles.size() > 6)
149 ✗ return;
150 ✗ sf::Color color = sf::Color::White;
151 ✗ for (auto &trantorian : _trantorians) {
152 ✗ if (trantorian._id == broadcast.value().getPlayerNb()) {
153 ✗ color = _teamsColor[trantorian._teamIndex > 5 ? 5 : trantorian._teamIndex];
154 ✗ break;
155 }
156 }
157 ✗ int random = rand() % 2;
158 ✗ _sounds["talk1"].stop();
159 ✗ _sounds["talk2"].stop();
160 ✗ if (random == 0)
161 ✗ _sounds["talk1"].play();
162 else
163 ✗ _sounds["talk2"].play();
164 ✗ _chat->addMessage(std::to_string(broadcast.value().getPlayerNb()) + " : " + broadcast.value().getMessage(), color);
165 ✗ Bubble bubble = Bubble(broadcast.value().getMessage(), sf::Vector2f(broadcast.value().getPosition()[0], broadcast.value().getPosition()[1]));
166 ✗ _bubbles.push_back(bubble);
167 }
168
169 }
170
171 ✗ void World::updateChuncks()
172 {
173 ✗ auto &map = _core->_data.getMap();
174 ✗ for (int i = 0; i < _worldSize.x; i++) {
175 ✗ for (int j = 0; j < _worldSize.y; j++) {
176 ✗ _chuncks[i][j]._inventory = map.getTileAt(i, j).getRessources();
177 ✗ _chuncks[i][j]._nbTrantorians = 0;
178 ✗ for (auto &trantorian : _trantorians)
179 ✗ if (trantorian.getTile().x == i && trantorian.getTile().y == j)
180 ✗ _chuncks[i][j]._nbTrantorians++;
181 }
182 }
183 ✗ }
184
185 ✗ void World::updateIncantation()
186 {
187 ✗ auto incantations = _core->_data.getIncantations();
188
189 ✗ if ((int)incantations.size() != _nbIncantations) {
190 ✗ _chat->addMessage("Incantation started");
191 ✗ _sounds["wololo"].stop();
192 ✗ _sounds["wololo"].play();
193 ✗ auto incantation = incantations[incantations.size() - 1];
194 ✗ sf::Vector2f tile = sf::Vector2f(incantation->getPosition()[0], incantation->getPosition()[1]);
195 ✗ sf::Vector2f pos = _chuncks[tile.x][tile.y].getMiddle();
196 ✗ _lvlUpAnims.push_back(LvlUpAnim(incantations.size() - 1,
197 pos, tile,
198 incantation->getLvl()));
199 ✗ _nbIncantations = incantations.size();
200 }
201 ✗ for (auto &lvlUpAnim : _lvlUpAnims) {
202 ✗ int state = incantations[lvlUpAnim.getId()]->getStatus();
203 ✗ if (state == IncantationOutcome::SUCCESS)
204 if (lvlUpAnim.setSuccess()) {
205 ✗ _chat->addMessage("Incantation success");
206 ✗ _sounds["hourray"].stop();
207 ✗ _sounds["hourray"].play();
208 ✗ _buildings[lvlUpAnim.getTile().x][lvlUpAnim.getTile().y] = lvlUpAnim.getLvl();
209 }
210 ✗ if (state == IncantationOutcome::FAILURE)
211 lvlUpAnim.setFailure();
212 ✗ lvlUpAnim.update(_core->getDeltaTime());
213 ✗ if (lvlUpAnim.isFinished())
214 ✗ _lvlUpAnims.erase(_lvlUpAnims.begin());
215 }
216 ✗ }
217