Removed unnecessary Renderer abstraction
This commit is contained in:
parent
e19972ae7c
commit
7cb2fd2e24
8 changed files with 89 additions and 98 deletions
|
@ -15,8 +15,6 @@ include_directories(${EIGEN3_INCLUDE_DIR})
|
|||
# Set up your project's source files
|
||||
set(SOURCES
|
||||
src/main.cpp
|
||||
src/game/renderer.h
|
||||
src/game/renderer.cpp
|
||||
src/game/game_object.cpp
|
||||
src/game/game_object.h
|
||||
src/game/game.cpp
|
||||
|
@ -32,7 +30,8 @@ set(SOURCES
|
|||
src/game/input_handler.h
|
||||
src/primitives/circle_object.cpp
|
||||
src/primitives/circle_object.h
|
||||
)
|
||||
src/game/game_factory.cpp
|
||||
src/game/game_factory.hpp)
|
||||
|
||||
# Add an executable target
|
||||
add_executable(Holesome ${SOURCES})
|
||||
|
|
|
@ -4,56 +4,70 @@
|
|||
|
||||
#include <utility>
|
||||
#include <SFML/Window/Event.hpp>
|
||||
#include <SFML/Graphics/RenderWindow.hpp>
|
||||
|
||||
#include "game.h"
|
||||
|
||||
Game::Game(std::shared_ptr<Renderer> renderer) : renderer(std::move(renderer)), isRunning(false), gameObjects() {
|
||||
Game::Game(std::shared_ptr<sf::RenderWindow> window) : window(std::move(window)), isRunning(false), gameObjects()
|
||||
{
|
||||
}
|
||||
|
||||
void Game::run() {
|
||||
if (isRunning) {
|
||||
void Game::run()
|
||||
{
|
||||
if (isRunning)
|
||||
{
|
||||
LOG(WARNING) << "Game is already running";
|
||||
return;
|
||||
}
|
||||
|
||||
isRunning = true;
|
||||
while (isRunning) {
|
||||
while (isRunning)
|
||||
{
|
||||
renderFrame();
|
||||
|
||||
// Process any events that have occurred since the last iteration
|
||||
sf::Event event{};
|
||||
while (renderer->pollEvent(event)) {
|
||||
while (window->pollEvent(event))
|
||||
{
|
||||
// If the event is to close the window, then close it
|
||||
if (event.type == sf::Event::Closed) {
|
||||
if (event.type == sf::Event::Closed)
|
||||
{
|
||||
exit();
|
||||
}
|
||||
|
||||
if (event.key.code == sf::Keyboard::Escape || event.key.code == sf::Keyboard::Q) {
|
||||
if (event.key.code == sf::Keyboard::Escape || event.key.code == sf::Keyboard::Q)
|
||||
{
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Game::exit() {
|
||||
void Game::exit()
|
||||
{
|
||||
isRunning = false;
|
||||
renderer->close();
|
||||
window->close();
|
||||
}
|
||||
|
||||
void Game::renderFrame() {
|
||||
for (auto &gameObject: gameObjects) {
|
||||
renderer->draw(gameObject);
|
||||
void Game::renderFrame()
|
||||
{
|
||||
for (auto &gameObject: gameObjects)
|
||||
{
|
||||
gameObject->draw(*window, sf::RenderStates::Default);
|
||||
}
|
||||
|
||||
renderer->display();
|
||||
window->display();
|
||||
}
|
||||
|
||||
Game::~Game() {
|
||||
for (auto &gameObject: gameObjects) {
|
||||
Game::~Game()
|
||||
{
|
||||
for (auto &gameObject: gameObjects)
|
||||
{
|
||||
delete gameObject;
|
||||
}
|
||||
}
|
||||
|
||||
void Game::addGameObject(GameObject *gameObject) {
|
||||
void Game::addGameObject(GameObject *gameObject)
|
||||
{
|
||||
gameObjects.push_back(gameObject);
|
||||
}
|
||||
|
|
|
@ -7,18 +7,17 @@
|
|||
|
||||
|
||||
#include <memory>
|
||||
#include "renderer.h"
|
||||
#include "../util/easylogging++.h"
|
||||
#include "game_object.h"
|
||||
|
||||
class Game {
|
||||
private:
|
||||
std::shared_ptr<Renderer> renderer;
|
||||
std::shared_ptr<sf::RenderWindow> window;
|
||||
std::vector<GameObject *> gameObjects;
|
||||
bool isRunning = false;
|
||||
|
||||
public:
|
||||
explicit Game(std::shared_ptr<Renderer> renderer);
|
||||
explicit Game(std::shared_ptr<sf::RenderWindow> window);
|
||||
~Game();
|
||||
|
||||
void run();
|
||||
|
|
32
src/game/game_factory.cpp
Normal file
32
src/game/game_factory.cpp
Normal file
|
@ -0,0 +1,32 @@
|
|||
//
|
||||
// Created by max on 28.04.23.
|
||||
//
|
||||
|
||||
#include <SFML/Graphics/RenderWindow.hpp>
|
||||
#include "game_factory.hpp"
|
||||
|
||||
|
||||
std::shared_ptr<Game> GameFactory::createWindowed(const std::string &title, int width, int height)
|
||||
{
|
||||
auto window = std::make_shared<sf::RenderWindow>(sf::VideoMode(width, height), title);
|
||||
return std::make_shared<Game>(window);
|
||||
}
|
||||
|
||||
std::shared_ptr<Game> GameFactory::createFullscreen(const std::string &title)
|
||||
{
|
||||
sf::VideoMode fullScreenMode;
|
||||
|
||||
auto availableModes = sf::VideoMode::getFullscreenModes();
|
||||
if (availableModes.empty())
|
||||
{
|
||||
LOG(INFO) << "No fullscreen modes available, falling back to Desktop Mode.";
|
||||
fullScreenMode = sf::VideoMode::getDesktopMode();
|
||||
} else
|
||||
{
|
||||
fullScreenMode = availableModes[0];
|
||||
fullScreenMode.bitsPerPixel = sf::VideoMode::getDesktopMode().bitsPerPixel;
|
||||
}
|
||||
|
||||
auto window = std::make_shared<sf::RenderWindow>(fullScreenMode, title, sf::Style::Fullscreen);
|
||||
return std::make_shared<Game>(window);
|
||||
}
|
17
src/game/game_factory.hpp
Normal file
17
src/game/game_factory.hpp
Normal file
|
@ -0,0 +1,17 @@
|
|||
#ifndef HOLESOME_GAME_FACTORY_HPP
|
||||
#define HOLESOME_GAME_FACTORY_HPP
|
||||
|
||||
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include "game.h"
|
||||
|
||||
class GameFactory
|
||||
{
|
||||
public:
|
||||
static std::shared_ptr<Game> createWindowed(const std::string &title, int width, int height);
|
||||
static std::shared_ptr<Game> createFullscreen(const std::string &title);
|
||||
|
||||
};
|
||||
|
||||
#endif //HOLESOME_GAME_FACTORY_HPP
|
|
@ -1,45 +0,0 @@
|
|||
#include "renderer.h"
|
||||
|
||||
void Renderer::draw(sf::Drawable *drawable) {
|
||||
window->draw(*drawable);
|
||||
}
|
||||
|
||||
void Renderer::close() {
|
||||
window->close();
|
||||
}
|
||||
|
||||
Renderer::~Renderer() {
|
||||
delete window;
|
||||
}
|
||||
|
||||
std::shared_ptr<Renderer> Renderer::createWindow(const std::string &title, int width, int height) {
|
||||
auto renderer = std::make_shared<Renderer>();
|
||||
renderer->window = new sf::RenderWindow(sf::VideoMode(width, height), title);
|
||||
return renderer;
|
||||
}
|
||||
|
||||
std::shared_ptr<Renderer> Renderer::createFullscreen(const std::string &title) {
|
||||
sf::VideoMode fullScreenMode;
|
||||
|
||||
auto availableModes = sf::VideoMode::getFullscreenModes();
|
||||
if (availableModes.empty()) {
|
||||
LOG(INFO) << "No fullscreen modes available, falling back to Desktop Mode.";
|
||||
fullScreenMode = sf::VideoMode::getDesktopMode();
|
||||
} else {
|
||||
fullScreenMode = availableModes[0];
|
||||
fullScreenMode.bitsPerPixel = sf::VideoMode::getDesktopMode().bitsPerPixel;
|
||||
}
|
||||
|
||||
auto renderer = std::make_shared<Renderer>();
|
||||
renderer->window = new sf::RenderWindow(fullScreenMode, title, sf::Style::Fullscreen);
|
||||
return renderer;
|
||||
}
|
||||
|
||||
void Renderer::display() {
|
||||
window->display();
|
||||
window->clear(sf::Color::Black);
|
||||
}
|
||||
|
||||
bool Renderer::pollEvent(sf::Event &event) {
|
||||
return window->pollEvent(event);
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
#ifndef HOLESOME_RENDERER_H
|
||||
#define HOLESOME_RENDERER_H
|
||||
|
||||
#include <SFML/Graphics/RenderWindow.hpp>
|
||||
#include "../util/easylogging++.h"
|
||||
|
||||
class Renderer {
|
||||
public:
|
||||
static std::shared_ptr<Renderer> createWindow(const std::string &title, int width = 960, int height = 540);
|
||||
|
||||
static std::shared_ptr<Renderer> createFullscreen(const std::string &title);
|
||||
|
||||
~Renderer();
|
||||
|
||||
bool pollEvent(sf::Event &event);
|
||||
|
||||
void draw(sf::Drawable *drawable);
|
||||
void display();
|
||||
|
||||
void close();
|
||||
|
||||
private:
|
||||
sf::RenderWindow *window;
|
||||
};
|
||||
|
||||
|
||||
#endif //HOLESOME_RENDERER_H
|
10
src/main.cpp
10
src/main.cpp
|
@ -3,15 +3,17 @@
|
|||
#include "util/easylogging++.h"
|
||||
#include "game/game.h"
|
||||
#include "primitives/circle_object.h"
|
||||
#include "game/game_factory.hpp"
|
||||
|
||||
INITIALIZE_EASYLOGGINGPP
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
START_EASYLOGGINGPP(argc, argv);
|
||||
|
||||
auto game = Game(Renderer::createFullscreen("Holesome"));
|
||||
auto game = GameFactory::createFullscreen("Holesome");
|
||||
|
||||
game.addGameObject(new CircleObject(50, sf::Color::Red));
|
||||
game->addGameObject(new CircleObject(50, sf::Color::Red));
|
||||
|
||||
game.run();
|
||||
game->run();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue