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