| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "Core.hpp" | ||
| 2 | |||
| 3 | #include "../scenes/world/World.hpp" | ||
| 4 | #include "../scenes/Home.hpp" | ||
| 5 | #include "../scenes/Quit.hpp" | ||
| 6 | #include "../scenes/Menu.hpp" | ||
| 7 | #include "../scenes/WinScene.hpp" | ||
| 8 | #include <iostream> | ||
| 9 | #include "../../utils/GuiException.hpp" | ||
| 10 | |||
| 11 | ✗ | Core::Core(int port, std::string ip) { | |
| 12 | ✗ | _window.create( | |
| 13 | ✗ | sf::VideoMode(_resolution.x , _resolution.y), | |
| 14 | "Zappy", | ||
| 15 | sf::Style::Close); | ||
| 16 | ✗ | _font.loadFromFile("assets/BadComic-Regular.ttf"); | |
| 17 | ✗ | _state = GameState::HOME; | |
| 18 | ✗ | _upperState = GameState::DEFAULT; | |
| 19 | ✗ | _shade = sf::RectangleShape(sf::Vector2f(1920, 1080)); | |
| 20 | ✗ | _shade.setFillColor(sf::Color(0, 0, 0, 150)); | |
| 21 | |||
| 22 | ✗ | _scenes[GameState::HOME] = std::make_shared<Home>(this, port, ip); | |
| 23 | ✗ | _scenes[GameState::END] = std::make_shared<Quit>(this); | |
| 24 | ✗ | _scenes[GameState::GAME] = std::make_shared<World>(this); | |
| 25 | ✗ | _scenes[GameState::MENU] = std::make_shared<Menu>(this); | |
| 26 | ✗ | _scenes[GameState::WIN] = std::make_shared<WinScene>(this); | |
| 27 | ✗ | _clock.restart(); | |
| 28 | ✗ | initSounds(); | |
| 29 | ✗ | _sounds["music"].play(); | |
| 30 | ✗ | std::cout << "play music" << std::endl; | |
| 31 | |||
| 32 | ✗ | if (!_cursorTexture.loadFromFile("assets/cursor.png")) | |
| 33 | ✗ | throw guiException("Failed to load cursor"); | |
| 34 | ✗ | _cursor.setTexture(_cursorTexture); | |
| 35 | ✗ | _window.setMouseCursorVisible(false); | |
| 36 | ✗ | initIcon(); | |
| 37 | ✗ | } | |
| 38 | |||
| 39 | ✗ | void Core::update() { | |
| 40 | ✗ | _deltaTime = _clock.getElapsedTime().asSeconds(); | |
| 41 | ✗ | _clock.restart(); | |
| 42 | |||
| 43 | ✗ | while (_window.pollEvent(_event)) { | |
| 44 | ✗ | if (_event.type == sf::Event::Closed) | |
| 45 | ✗ | _upperState = GameState::END; | |
| 46 | ✗ | if (_event.type == sf::Event::MouseMoved) { | |
| 47 | ✗ | _realMousePos = sf::Vector2f(_event.mouseMove.x, _event.mouseMove.y); | |
| 48 | ✗ | if (_state == GameState::GAME) { | |
| 49 | ✗ | _mousePos = sf::Vector2f( | |
| 50 | ✗ | _event.mouseMove.x * 1920 / _window.getSize().x, | |
| 51 | ✗ | _event.mouseMove.y * 1080 / _window.getSize().y | |
| 52 | ); | ||
| 53 | } else | ||
| 54 | ✗ | _mousePos = sf::Vector2f(_event.mouseMove.x, _event.mouseMove.y); | |
| 55 | } | ||
| 56 | _scenes[ | ||
| 57 | ✗ | ((_upperState != GameState::DEFAULT) ? _upperState : _state) | |
| 58 | ✗ | ]->update(_event, _window); | |
| 59 | } | ||
| 60 | _scenes[ | ||
| 61 | ✗ | ((_upperState != GameState::DEFAULT) ? _upperState : _state) | |
| 62 | ✗ | ]->update(_deltaTime); | |
| 63 | ✗ | } | |
| 64 | |||
| 65 | ✗ | void Core::run() { | |
| 66 | ✗ | while (_window.isOpen()) { | |
| 67 | ✗ | _parser.updateData(_data, _server); | |
| 68 | ✗ | auto players = _data.getPlayers(); | |
| 69 | ✗ | for (auto &player : players) | |
| 70 | ✗ | player.second->getNextEvent(); | |
| 71 | ✗ | update(); | |
| 72 | ✗ | draw(); | |
| 73 | } | ||
| 74 | ✗ | } | |
| 75 | |||
| 76 | ✗ | void Core::draw() { | |
| 77 | ✗ | _window.clear(sf::Color(82,198,255)); | |
| 78 | |||
| 79 | ✗ | _scenes[_state]->draw(_window); | |
| 80 | ✗ | if (_upperState != GameState::DEFAULT) { | |
| 81 | ✗ | _window.draw(_shade); | |
| 82 | ✗ | _scenes[_upperState]->draw(_window); | |
| 83 | } | ||
| 84 | ✗ | _cursor.setPosition(_window.mapPixelToCoords(sf::Mouse::getPosition(_window))); | |
| 85 | ✗ | _window.draw(_cursor); | |
| 86 | ✗ | _window.display(); | |
| 87 | ✗ | } | |
| 88 | |||
| 89 | ✗ | void Core::newResolution(sf::Vector2f resolution) { | |
| 90 | ✗ | if (resolution.x == _resolution.x && resolution.y == _resolution.y) | |
| 91 | return; | ||
| 92 | ✗ | _resolution = resolution; | |
| 93 | ✗ | _window.create( | |
| 94 | ✗ | sf::VideoMode(_resolution.x, _resolution.y), | |
| 95 | "Zappy", | ||
| 96 | ✗ | (_fullscreen) ? sf::Style::Fullscreen : sf::Style::Close); | |
| 97 | ✗ | _window.setMouseCursorVisible(false); | |
| 98 | } | ||
| 99 | |||
| 100 | ✗ | void Core::switchFullscreen() { | |
| 101 | ✗ | _fullscreen = !_fullscreen; | |
| 102 | ✗ | _window.create( | |
| 103 | ✗ | sf::VideoMode(_resolution.x, _resolution.y), | |
| 104 | "Zappy", | ||
| 105 | (_fullscreen) ? sf::Style::Fullscreen : sf::Style::Close); | ||
| 106 | ✗ | _window.setMouseCursorVisible(false); | |
| 107 | ✗ | } | |
| 108 | |||
| 109 | ✗ | bool Core::connectToServer(int port, std::string ip) { | |
| 110 | try { | ||
| 111 | ✗ | _server.connectToServer(port, ip.c_str()); | |
| 112 | ✗ | } catch (guiException &e) { | |
| 113 | return false; | ||
| 114 | ✗ | } | |
| 115 | return true; | ||
| 116 | } | ||
| 117 | |||
| 118 | ✗ | void Core::backToHome() { | |
| 119 | ✗ | if (_server.disconectFromServer() == true) | |
| 120 | ✗ | _data.resetGame(); | |
| 121 | ✗ | _upperState = GameState::DEFAULT; | |
| 122 | ✗ | _state = GameState::HOME; | |
| 123 | ✗ | } | |
| 124 | |||
| 125 | ✗ | void Core::initSounds() { | |
| 126 | ✗ | _music.openFromFile("assets/audio/music.ogg"); | |
| 127 | ✗ | _music.setLoop(true); | |
| 128 | ✗ | _music.play(); | |
| 129 | ✗ | } | |
| 130 | |||
| 131 | ✗ | void Core::initIcon() { | |
| 132 | try { | ||
| 133 | ✗ | sf::Image icon; | |
| 134 | ✗ | icon.loadFromFile("assets/icon.png"); | |
| 135 | ✗ | _window.setIcon(32, 32, icon.getPixelsPtr()); | |
| 136 | ✗ | } catch (const std::exception &e) { | |
| 137 | ✗ | std::cerr << "Failed to set icon" << std::endl; | |
| 138 | ✗ | } | |
| 139 | ✗ | } | |
| 140 |