| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | ** EPITECH PROJECT, 2024 | ||
| 3 | ** zappy | ||
| 4 | ** File description: | ||
| 5 | ** world | ||
| 6 | */ | ||
| 7 | |||
| 8 | #include "World.hpp" | ||
| 9 | #include "../../core/Core.hpp" | ||
| 10 | #include "../../../utils/Random.hpp" | ||
| 11 | |||
| 12 | ✗ | void World::draw(sf::RenderWindow &window) | |
| 13 | { | ||
| 14 | ✗ | _sprites["background"]->draw(window); | |
| 15 | ✗ | if (_core->_funMode) | |
| 16 | ✗ | for (auto &starling : _starlings) { | |
| 17 | ✗ | _sprites["starling"]->setPosition(starling._pos); | |
| 18 | ✗ | _sprites["starling"]->setRotation(starling._rotation); | |
| 19 | ✗ | _sprites["starling"]->draw(window); | |
| 20 | } | ||
| 21 | ✗ | _view.setCenter(_pos + _tmpOffset + _offset); | |
| 22 | ✗ | _viewRect = sf::FloatRect( | |
| 23 | ✗ | _view.getCenter().x - _view.getSize().x / 2 - 50, | |
| 24 | ✗ | _view.getCenter().y - _view.getSize().y / 2 - 50, | |
| 25 | ✗ | _view.getSize().x + 100, | |
| 26 | ✗ | _view.getSize().y + 100 | |
| 27 | ); | ||
| 28 | ✗ | window.setView(_view); | |
| 29 | |||
| 30 | ✗ | iterateWorld([&](int i, int j) { | |
| 31 | ✗ | layer1(i, j); | |
| 32 | }); | ||
| 33 | ✗ | iterateWorld([&](int i, int j) { | |
| 34 | ✗ | layer2(i, j); | |
| 35 | }); | ||
| 36 | ✗ | window.setView(window.getDefaultView()); | |
| 37 | ✗ | _worldUi.draw(window); | |
| 38 | ✗ | _chat->setPosition(sf::Vector2f( | |
| 39 | 50, | ||
| 40 | ✗ | window.getSize().y - 50 | |
| 41 | )); | ||
| 42 | ✗ | _chat->draw(window); | |
| 43 | ✗ | } | |
| 44 | |||
| 45 | ✗ | void World::layer1(int i, int j) | |
| 46 | { | ||
| 47 | ✗ | if (_viewRect.contains(_chuncks[i][j].getMiddle()) == false) | |
| 48 | ✗ | return; | |
| 49 | ✗ | sf::RenderWindow &window = _core->getWindow(); | |
| 50 | ✗ | _sprite->_sprite.setPosition( | |
| 51 | _chuncks[i][j]._pos.x, | ||
| 52 | ✗ | _chuncks[i][j]._pos.y + _chuncks[i][j]._yOffset | |
| 53 | ); | ||
| 54 | ✗ | window.draw(_sprite->_sprite); | |
| 55 | ✗ | if (i == _hoveredTile.x && j == _hoveredTile.y && !_isDragging) { | |
| 56 | ✗ | _sprites["hover1"]->_sprite.setPosition( | |
| 57 | _chuncks[i][j]._pos.x, | ||
| 58 | ✗ | _chuncks[i][j]._pos.y + _chuncks[i][j]._yOffset | |
| 59 | ); | ||
| 60 | ✗ | window.draw(_sprites["hover1"]->_sprite); | |
| 61 | } | ||
| 62 | |||
| 63 | ✗ | std::map<int, Egg> eggs = _core->_data.getEggs(); | |
| 64 | ✗ | for (auto &egg : eggs) { | |
| 65 | ✗ | if (egg.second.getState() != EggStatus::HATCHED && | |
| 66 | ✗ | egg.second.getPos()[0] == i && egg.second.getPos()[1] == j) { | |
| 67 | ✗ | _sprites["hoverEgg"]->_sprite.setPosition( | |
| 68 | _chuncks[i][j]._pos.x, | ||
| 69 | ✗ | _chuncks[i][j]._pos.y + _chuncks[i][j]._yOffset | |
| 70 | ); | ||
| 71 | ✗ | _sprites["hoverEgg"]->setColor(sf::Color(98, 151, 50)); | |
| 72 | ✗ | window.draw(_sprites["hoverEgg"]->_sprite); | |
| 73 | } | ||
| 74 | } | ||
| 75 | } | ||
| 76 | |||
| 77 | ✗ | void World::layer2(int i, int j) | |
| 78 | { | ||
| 79 | ✗ | if (_viewRect.contains(_chuncks[i][j].getMiddle()) == false) | |
| 80 | return; | ||
| 81 | ✗ | sf::RenderWindow &window = _core->getWindow(); | |
| 82 | ✗ | if (!drawBuilding(window, i, j) && !drawTrantorian(window, i, j)) | |
| 83 | ✗ | _chuncks[i][j].draw(window); | |
| 84 | bool incantation = false; | ||
| 85 | ✗ | for (auto &lvlUpAnim : _lvlUpAnims) | |
| 86 | ✗ | if (lvlUpAnim.getTile().x == i && lvlUpAnim.getTile().y == j) { | |
| 87 | lvlUpAnim.draw(window); | ||
| 88 | incantation = true; | ||
| 89 | } | ||
| 90 | ✗ | if (!incantation && _selectedTile.x == i && _selectedTile.y == j) { | |
| 91 | ✗ | _sprites["halo1"]->_sprite.setPosition( | |
| 92 | _chuncks[i][j]._pos.x, | ||
| 93 | ✗ | _chuncks[i][j]._pos.y + _chuncks[i][j]._yOffset - TILE_SIZE_Y / 2 | |
| 94 | ); | ||
| 95 | ✗ | window.draw(_sprites["halo1"]->_sprite); | |
| 96 | } | ||
| 97 | ✗ | for (auto &bubble : _bubbles) { | |
| 98 | ✗ | if (i == bubble.getPos().x && j == bubble.getPos().y) { | |
| 99 | ✗ | _sprites["bubble"]->_sprite.setPosition( | |
| 100 | ✗ | _chuncks[i][j].getMiddle()); | |
| 101 | ✗ | window.draw(_sprites["bubble"]->_sprite); | |
| 102 | ✗ | _bubbleText.setString(bubble.getMessage()); | |
| 103 | ✗ | _bubbleText.setPosition( | |
| 104 | ✗ | _chuncks[i][j].getMiddle().x + 25, | |
| 105 | ✗ | _chuncks[i][j].getMiddle().y + -50 | |
| 106 | ); | ||
| 107 | ✗ | window.draw(_bubbleText); | |
| 108 | } | ||
| 109 | } | ||
| 110 | } | ||
| 111 | |||
| 112 | ✗ | bool World::drawBuilding(sf::RenderWindow &window, int i, int j) | |
| 113 | { | ||
| 114 | bool ret = false; | ||
| 115 | ✗ | if (_buildings[i][j] != 0 && | |
| 116 | ✗ | _worldUi.getPanelState() != WorldUi::panelState::FLAG && | |
| 117 | _worldUi.getPanelState() != WorldUi::panelState::TRANTORIAN) { | ||
| 118 | ✗ | _sprites["buildings"]->_sprite.setPosition( | |
| 119 | _chuncks[i][j]._pos.x, | ||
| 120 | ✗ | _chuncks[i][j]._pos.y + _chuncks[i][j]._yOffset - TILE_SIZE_Y / 2 | |
| 121 | ); | ||
| 122 | ✗ | _sprites["buildings"]->setFrame(_buildings[i][j] - 1); | |
| 123 | ✗ | window.draw(_sprites["buildings"]->_sprite); | |
| 124 | ret = true; | ||
| 125 | } | ||
| 126 | ✗ | return ret; | |
| 127 | } | ||
| 128 | |||
| 129 | ✗ | bool World::drawTrantorian(sf::RenderWindow &window, int i, int j) | |
| 130 | { | ||
| 131 | bool ret = false; | ||
| 132 | int index = 0; | ||
| 133 | |||
| 134 | ✗ | for (auto &trantorian : _trantorians) { | |
| 135 | ✗ | if (trantorian.getTile().x == i && trantorian.getTile().y == j) { | |
| 136 | ✗ | trantorian.draw(window); | |
| 137 | ✗ | if (trantorian.isDead()) | |
| 138 | ✗ | continue; | |
| 139 | ret = true; | ||
| 140 | ✗ | if (trantorian.getTile().x == i && trantorian.getTile().y == j) { | |
| 141 | ✗ | if ((_worldUi.getPanelState() == WorldUi::panelState::TRANTORIAN && | |
| 142 | ✗ | index == _worldUi._idPlayer) || | |
| 143 | ✗ | (_worldUi.getPanelState() == WorldUi::panelState::FLAG && | |
| 144 | ✗ | trantorian._team == _teams[_worldUi._idTeam])) { | |
| 145 | ✗ | _sprites["aura"]->_sprite.setPosition(trantorian.getPos() + sf::Vector2f(0, -40)); | |
| 146 | ✗ | _sprites["aura"]->setColor(_teamsColor[trantorian._teamIndex > 5 ? 5 : trantorian._teamIndex]); | |
| 147 | ✗ | _sprites["aura"]->setScale(_zoom); | |
| 148 | |||
| 149 | ✗ | window.draw(_sprites["aura"]->_sprite); | |
| 150 | } | ||
| 151 | } | ||
| 152 | ✗ | if (_zoom > 0.6f) | |
| 153 | ✗ | continue; | |
| 154 | ✗ | _sprites["lvlbanner"]->_sprite.setPosition(trantorian.getPos()); | |
| 155 | ✗ | _sprites["lvlbanner"]->setFrame(trantorian._level - 1); | |
| 156 | ✗ | _sprites["lvlbanner"]->setColor(_teamsColor[trantorian._teamIndex > 5 ? 5 : trantorian._teamIndex]); | |
| 157 | ✗ | window.draw(_sprites["lvlbanner"]->_sprite); | |
| 158 | } | ||
| 159 | ✗ | index++; | |
| 160 | } | ||
| 161 | ✗ | return ret; | |
| 162 | } | ||
| 163 |