holesome/src/game/game.cpp

75 lines
1.5 KiB
C++
Raw Normal View History

2023-04-26 22:48:15 +02:00
#include <utility>
2023-04-27 23:05:19 +02:00
#include <SFML/Window/Event.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
2023-04-26 22:48:15 +02:00
#include "game.h"
#include "../config.h"
2023-04-26 22:48:15 +02:00
Game::Game(std::shared_ptr<sf::RenderWindow> window) : window(std::move(window)), gameObjects() {
2023-04-26 22:48:15 +02:00
}
void Game::run() {
sf::Clock clock;
sf::Time TimeSinceLastUpdate = sf::seconds(0);
2023-04-26 22:48:15 +02:00
while (window->isOpen()) {
processEvents();
TimeSinceLastUpdate += clock.restart();
while (TimeSinceLastUpdate >= FRAME_TIME) {
TimeSinceLastUpdate -= FRAME_TIME;
2023-04-27 23:05:19 +02:00
update();
processEvents();
2023-04-27 23:05:19 +02:00
}
drawFrame();
2023-04-26 22:48:15 +02:00
}
}
void Game::exit() {
window->close();
2023-04-27 23:05:19 +02:00
}
void Game::drawFrame() {
window->clear(sf::Color::Black);
for (auto &gameObject: gameObjects) {
gameObject->draw(window.get());
2023-04-27 23:05:19 +02:00
}
window->display();
2023-04-27 23:05:19 +02:00
}
Game::~Game() {
for (auto &gameObject: gameObjects) {
2023-04-27 23:05:19 +02:00
delete gameObject;
}
}
void Game::addGameObject(GameObject *gameObject) {
gameObjects.push_back(gameObject);
}
2023-05-03 01:33:14 +02:00
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:
break;
case sf::Event::KeyReleased:
break;
case sf::Event::Closed:
exit();
break;
default:
break;
}
}
}