| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | ** EPITECH PROJECT, 2024 | ||
| 3 | ** zappy | ||
| 4 | ** File description: | ||
| 5 | ** WorldUi | ||
| 6 | */ | ||
| 7 | |||
| 8 | #include "WorldUi.hpp" | ||
| 9 | #include "../World.hpp" | ||
| 10 | |||
| 11 | static const std::vector<std::string> orientation = { | ||
| 12 | "NORTH", | ||
| 13 | "EAST", | ||
| 14 | "SOUTH", | ||
| 15 | "WEST" | ||
| 16 | }; | ||
| 17 | |||
| 18 | ✗ | void WorldUi::init() | |
| 19 | { | ||
| 20 | ✗ | } | |
| 21 | |||
| 22 | ✗ | bool WorldUi::update(sf::Event event, sf::RenderWindow &window) | |
| 23 | { | ||
| 24 | int index = 0; | ||
| 25 | |||
| 26 | ✗ | for (auto &button : _layer1) { | |
| 27 | ✗ | if (button->update(event, window)) { | |
| 28 | ✗ | _panelState = (panelState)index; | |
| 29 | return true; | ||
| 30 | } | ||
| 31 | ✗ | index++; | |
| 32 | } | ||
| 33 | ✗ | if (_panelState != NONE) { | |
| 34 | ✗ | if (_layer2["closeButton"]->update(event, window)) { | |
| 35 | ✗ | _panelState = NONE; | |
| 36 | ✗ | return true; | |
| 37 | } | ||
| 38 | } | ||
| 39 | ✗ | if (_panelState == TRANTORIAN) { | |
| 40 | ✗ | if (_layer2["prevButton"]->update(event, window)) { | |
| 41 | ✗ | if (_world->getNbTrantorian() == 0) | |
| 42 | return false; | ||
| 43 | ✗ | _idPlayer--; | |
| 44 | ✗ | if (_idPlayer < 0) | |
| 45 | ✗ | _idPlayer = _world->getNbTrantorian() - 1; | |
| 46 | } | ||
| 47 | ✗ | if (_layer2["nextButton"]->update(event, window)) { | |
| 48 | ✗ | if (_world->getNbTrantorian() == 0) | |
| 49 | return false; | ||
| 50 | ✗ | _idPlayer = (_idPlayer + 1) % _world->getNbTrantorian(); | |
| 51 | } | ||
| 52 | ✗ | if (_world->getNbTrantorian() != 0) | |
| 53 | ✗ | if (_layer2["lookButton"]->update(event, window)) { | |
| 54 | ✗ | _world->lookTrantorian(_idPlayer); | |
| 55 | } | ||
| 56 | } | ||
| 57 | ✗ | if (_panelState == FLAG) { | |
| 58 | ✗ | if (_layer2["prevButton"]->update(event, window)) { | |
| 59 | ✗ | _idTeam--; | |
| 60 | ✗ | if (_idTeam < 0) | |
| 61 | ✗ | _idTeam = _world->_teams.size() - 1; | |
| 62 | } | ||
| 63 | |||
| 64 | ✗ | if (_layer2["nextButton"]->update(event, window)) { | |
| 65 | ✗ | _idTeam = (_idTeam + 1) % _world->_teams.size(); | |
| 66 | } | ||
| 67 | |||
| 68 | } | ||
| 69 | return false; | ||
| 70 | } | ||
| 71 | |||
| 72 | ✗ | void WorldUi::update(float /*fElapsedTime*/) | |
| 73 | { | ||
| 74 | ✗ | } | |
| 75 | |||
| 76 | ✗ | void WorldUi::draw(sf::RenderWindow &window) | |
| 77 | { | ||
| 78 | ✗ | for (auto &button : _layer1) | |
| 79 | ✗ | button->draw(window); | |
| 80 | ✗ | if (_panelState != NONE) | |
| 81 | ✗ | _layer2["closeButton"]->draw(window); | |
| 82 | ✗ | if (_panelState == TRANTORIAN) | |
| 83 | ✗ | drawPlayerInventory(window); | |
| 84 | ✗ | else if (_world->_selectedTile.x != -1 && _world->_selectedTile.y != -1) | |
| 85 | ✗ | drawTileInventory(window); | |
| 86 | ✗ | if (_panelState == TROPHY) | |
| 87 | ✗ | drawRanking(window); | |
| 88 | ✗ | if (_panelState == TRANTORIAN) | |
| 89 | ✗ | drawTrantorian(window); | |
| 90 | ✗ | if (_panelState == FLAG) | |
| 91 | ✗ | drawTeam(window); | |
| 92 | ✗ | } | |
| 93 | |||
| 94 | ✗ | void WorldUi::drawInventoryTile(int nb, sf::RenderWindow &window, std::string name) | |
| 95 | { | ||
| 96 | |||
| 97 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 98 | ✗ | _sprites["inventory"]->getPosition().x - 64 * 4 + 17 + 61 * nb, | |
| 99 | ✗ | _sprites["inventory"]->getPosition().y - 5 | |
| 100 | )); | ||
| 101 | ✗ | _inventoryText.setString(name); | |
| 102 | ✗ | window.draw(_inventoryText); | |
| 103 | ✗ | } | |
| 104 | |||
| 105 | ✗ | void WorldUi::drawRanking(sf::RenderWindow &window) | |
| 106 | { | ||
| 107 | ✗ | _sprites["trophyPanel"]->draw(window); | |
| 108 | int index = 0; | ||
| 109 | ✗ | for (auto rank : _world->_rankings) { | |
| 110 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 111 | ✗ | _sprites["trophyPanel"]->getPosition().x + 96, | |
| 112 | ✗ | _sprites["trophyPanel"]->getPosition().y + 32 + 40 * index | |
| 113 | )); | ||
| 114 | ✗ | _inventoryText.setString(rank._teamName + " : " + std::to_string(rank._score)); | |
| 115 | ✗ | window.draw(_inventoryText); | |
| 116 | ✗ | index++; | |
| 117 | } | ||
| 118 | ✗ | } | |
| 119 | |||
| 120 | ✗ | void WorldUi::drawTeam(sf::RenderWindow &window) | |
| 121 | { | ||
| 122 | ✗ | _sprites["flagPanel"]->draw(window); | |
| 123 | ✗ | _layer2["prevButton"]->draw(window); | |
| 124 | ✗ | _layer2["nextButton"]->draw(window); | |
| 125 | |||
| 126 | ✗ | Ranking rank; | |
| 127 | ✗ | for (auto team: _world->_rankings) { | |
| 128 | ✗ | if (team._teamName == _world->_teams[_idTeam]) { | |
| 129 | rank = team; | ||
| 130 | break; | ||
| 131 | } | ||
| 132 | } | ||
| 133 | |||
| 134 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 135 | ✗ | _sprites["trophyPanel"]->getPosition().x + 96, | |
| 136 | ✗ | _sprites["trophyPanel"]->getPosition().y + 40 | |
| 137 | )); | ||
| 138 | ✗ | _inventoryText.setString("team " + rank._teamName); | |
| 139 | ✗ | window.draw(_inventoryText); | |
| 140 | |||
| 141 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 142 | ✗ | _sprites["trophyPanel"]->getPosition().x + 96, | |
| 143 | ✗ | _sprites["trophyPanel"]->getPosition().y + 40 + 25 | |
| 144 | )); | ||
| 145 | ✗ | _inventoryText.setString(std::to_string(rank._score) + " points"); | |
| 146 | ✗ | window.draw(_inventoryText); | |
| 147 | |||
| 148 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 149 | ✗ | _sprites["trophyPanel"]->getPosition().x + 96, | |
| 150 | ✗ | _sprites["trophyPanel"]->getPosition().y + 40 + 50 | |
| 151 | )); | ||
| 152 | ✗ | _inventoryText.setString(std::to_string(rank._nbPlayer) + " trantorians"); | |
| 153 | ✗ | window.draw(_inventoryText); | |
| 154 | |||
| 155 | ✗ | } | |
| 156 | |||
| 157 | ✗ | void WorldUi::drawTrantorian(sf::RenderWindow &window) | |
| 158 | { | ||
| 159 | ✗ | _sprites["trantorianPanel"]->draw(window); | |
| 160 | ✗ | _layer2["prevButton"]->draw(window); | |
| 161 | ✗ | _layer2["nextButton"]->draw(window); | |
| 162 | ✗ | _sprites["bousolle"]->setPosition(sf::Vector2f( | |
| 163 | ✗ | window.getSize().x - 256 / 4, | |
| 164 | 256 / 4 | ||
| 165 | )); | ||
| 166 | ✗ | _sprites["bousolle"]->draw(window); | |
| 167 | ✗ | if (_world->getNbTrantorian() == 0) | |
| 168 | ✗ | return; | |
| 169 | ✗ | _layer2["lookButton"]->draw(window); | |
| 170 | ✗ | auto trantorian = _world->getTrantorian(_idPlayer); | |
| 171 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 172 | ✗ | _sprites["trantorianPanel"]->getPosition().x + + 96, | |
| 173 | ✗ | _sprites["trantorianPanel"]->getPosition().y + 32 | |
| 174 | )); | ||
| 175 | ✗ | if (trantorian.isDead()) { | |
| 176 | ✗ | _inventoryText.setString("Dead"); | |
| 177 | ✗ | window.draw(_inventoryText); | |
| 178 | return; | ||
| 179 | } | ||
| 180 | ✗ | _inventoryText.setString("Trantorian #" + std::to_string(trantorian._id)); | |
| 181 | ✗ | window.draw(_inventoryText); | |
| 182 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 183 | ✗ | _sprites["trantorianPanel"]->getPosition().x + + 96, | |
| 184 | ✗ | _sprites["trantorianPanel"]->getPosition().y + 32 + 25 | |
| 185 | )); | ||
| 186 | ✗ | _inventoryText.setString("Level " + std::to_string(trantorian._level)); | |
| 187 | ✗ | window.draw(_inventoryText); | |
| 188 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 189 | ✗ | _sprites["trantorianPanel"]->getPosition().x + + 96, | |
| 190 | ✗ | _sprites["trantorianPanel"]->getPosition().y + 32 + 50 | |
| 191 | )); | ||
| 192 | ✗ | int facing = trantorian._facing - 1; | |
| 193 | ✗ | if (facing < 0) | |
| 194 | facing = 3; | ||
| 195 | ✗ | if (facing > 3) | |
| 196 | facing = 0; | ||
| 197 | ✗ | _inventoryText.setString("Facing " + orientation[facing]); | |
| 198 | ✗ | window.draw(_inventoryText); | |
| 199 | ✗ | } | |
| 200 | |||
| 201 | ✗ | void WorldUi::drawTileInventory(sf::RenderWindow &window) | |
| 202 | { | ||
| 203 | ✗ | _sprites["inventory"]->setPosition(sf::Vector2f( | |
| 204 | ✗ | window.getSize().x / 2, | |
| 205 | ✗ | window.getSize().y - 32 | |
| 206 | )); | ||
| 207 | ✗ | _sprites["inventory"]->draw(window); | |
| 208 | ✗ | drawInventoryTile(0, window, std::to_string(_world->_chuncks[_world->_selectedTile.x][_world->_selectedTile.y]._inventory[1])); | |
| 209 | ✗ | drawInventoryTile(1, window, std::to_string(_world->_chuncks[_world->_selectedTile.x][_world->_selectedTile.y]._inventory[2])); | |
| 210 | ✗ | drawInventoryTile(2, window, std::to_string(_world->_chuncks[_world->_selectedTile.x][_world->_selectedTile.y]._inventory[3])); | |
| 211 | ✗ | drawInventoryTile(3, window, std::to_string(_world->_chuncks[_world->_selectedTile.x][_world->_selectedTile.y]._inventory[4])); | |
| 212 | ✗ | drawInventoryTile(4, window, std::to_string(_world->_chuncks[_world->_selectedTile.x][_world->_selectedTile.y]._inventory[5])); | |
| 213 | ✗ | drawInventoryTile(5, window, std::to_string(_world->_chuncks[_world->_selectedTile.x][_world->_selectedTile.y]._inventory[6])); | |
| 214 | ✗ | _sprites["food"]->setPosition(sf::Vector2f( | |
| 215 | ✗ | _sprites["inventory"]->getPosition().x + 61 * 2, | |
| 216 | ✗ | _sprites["inventory"]->getPosition().y | |
| 217 | )); | ||
| 218 | ✗ | _sprites["food"]->draw(window); | |
| 219 | ✗ | _sprites["trantorian"]->setPosition(sf::Vector2f( | |
| 220 | ✗ | _sprites["inventory"]->getPosition().x + 61 * 3, | |
| 221 | ✗ | _sprites["inventory"]->getPosition().y + 10 | |
| 222 | )); | ||
| 223 | ✗ | _sprites["trantorian"]->draw(window); | |
| 224 | ✗ | drawInventoryTile(6, window, std::to_string(_world->_chuncks[_world->_selectedTile.x][_world->_selectedTile.y]._inventory[0])); | |
| 225 | ✗ | drawInventoryTile(7, window, std::to_string(_world->_chuncks[_world->_selectedTile.x][_world->_selectedTile.y]._nbTrantorians)); | |
| 226 | ✗ | _inventoryText.setString("Chunck inventory"); | |
| 227 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 228 | ✗ | _sprites["inventory"]->getPosition().x, | |
| 229 | ✗ | _sprites["inventory"]->getPosition().y - 64 | |
| 230 | )); | ||
| 231 | ✗ | window.draw(_inventoryText); | |
| 232 | ✗ | } | |
| 233 | |||
| 234 | ✗ | void WorldUi::drawPlayerInventory(sf::RenderWindow &window) | |
| 235 | { | ||
| 236 | ✗ | if (_world->getNbTrantorian() == 0) | |
| 237 | return; | ||
| 238 | ✗ | _sprites["inventory"]->setPosition(sf::Vector2f( | |
| 239 | ✗ | window.getSize().x / 2, | |
| 240 | ✗ | window.getSize().y - 32 | |
| 241 | )); | ||
| 242 | ✗ | _sprites["inventory"]->draw(window); | |
| 243 | ✗ | drawInventoryTile(0, window, std::to_string(_world->getTrantorian(_idPlayer)._inventory[1])); | |
| 244 | ✗ | drawInventoryTile(1, window, std::to_string(_world->getTrantorian(_idPlayer)._inventory[2])); | |
| 245 | ✗ | drawInventoryTile(2, window, std::to_string(_world->getTrantorian(_idPlayer)._inventory[3])); | |
| 246 | ✗ | drawInventoryTile(3, window, std::to_string(_world->getTrantorian(_idPlayer)._inventory[4])); | |
| 247 | ✗ | drawInventoryTile(4, window, std::to_string(_world->getTrantorian(_idPlayer)._inventory[5])); | |
| 248 | ✗ | drawInventoryTile(5, window, std::to_string(_world->getTrantorian(_idPlayer)._inventory[6])); | |
| 249 | ✗ | _sprites["food"]->setPosition(sf::Vector2f( | |
| 250 | ✗ | _sprites["inventory"]->getPosition().x + 61 * 2, | |
| 251 | ✗ | _sprites["inventory"]->getPosition().y | |
| 252 | )); | ||
| 253 | ✗ | _sprites["food"]->draw(window); | |
| 254 | ✗ | drawInventoryTile(6, window, std::to_string(_world->getTrantorian(_idPlayer)._inventory[0])); | |
| 255 | ✗ | _inventoryText.setString("Trantorian inventory"); | |
| 256 | ✗ | _inventoryText.setPosition(sf::Vector2f( | |
| 257 | ✗ | _sprites["inventory"]->getPosition().x, | |
| 258 | ✗ | _sprites["inventory"]->getPosition().y - 64 | |
| 259 | )); | ||
| 260 | ✗ | window.draw(_inventoryText); | |
| 261 | } | ||
| 262 |