#include #include #include #include "game.h" #include "../config.h" Game::Game(std::shared_ptr window) : window(std::move(window)), gameObjects() { } void Game::run() { sf::Clock clock; sf::Time TimeSinceLastUpdate = sf::seconds(0); while (window->isOpen()) { processEvents(); TimeSinceLastUpdate += clock.restart(); while (TimeSinceLastUpdate >= FRAME_TIME) { TimeSinceLastUpdate -= FRAME_TIME; update(); processEvents(); } drawFrame(); } } void Game::exit() { window->close(); } void Game::drawFrame() { window->clear(sf::Color::Black); for (auto &gameObject: gameObjects) { gameObject->draw(window.get()); } window->display(); } Game::~Game() { for (auto &gameObject: gameObjects) { delete gameObject; } } void Game::addGameObject(GameObject *gameObject) { gameObjects.push_back(gameObject); } void Game::update() { for (auto &gameObject: gameObjects) { gameObject->update(); } } void Game::processEvents() { sf::Event event; while (window->pollEvent(event)) { switch (event.type) { case sf::Event::KeyPressed: // Close game on Escape or Q in DEV Mode if (DEVELOPER_MODE && (event.key.code == sf::Keyboard::Escape || event.key.code == sf::Keyboard::Q)) { exit(); } break; case sf::Event::KeyReleased: break; case sf::Event::Closed: exit(); break; case sf::Event::Resized: handleWindowResize(event); break; default: break; } } } void Game::handleWindowResize(const sf::Event &event) { window->setView(sf::View(sf::FloatRect(0, 0, event.size.width, event.size.height))); }