shooter/engine/Engine.cpp

93 lines
2.8 KiB
C++
Raw Normal View History

2021-09-13 15:53:43 +03:00
//
// Created by Иван Ильин on 14.01.2021.
//
#include "Engine.h"
#include "utils/Time.h"
#include <iostream>
#include "ResourceManager.h"
#include "physics/Solver.h"
#include "animation/Timeline.h"
2021-09-13 15:53:43 +03:00
Engine::Engine() {
screen = std::make_shared<Screen>();
keyboard = std::make_shared<Keyboard>();
mouse = std::make_shared<Mouse>();
2021-09-13 15:53:43 +03:00
world = std::make_shared<World>();
camera = std::make_shared<Camera>();
}
void Engine::create(int screenWidth, int screenHeight, const std::string &name, bool verticalSync, sf::Color background, sf::Uint32 style) {
_name = name;
2021-09-13 15:53:43 +03:00
screen->open(screenWidth, screenHeight, name, verticalSync, background, style);
screen->attachMouse(mouse);
2021-09-13 15:53:43 +03:00
2021-10-03 07:47:05 +03:00
Log::log("Engine::create(): started engine (" + std::to_string(screenWidth) + " _x " + std::to_string(screenHeight) + ") with title '" + name + "'.");
2021-09-13 15:53:43 +03:00
Time::update();
start();
camera->init(screenWidth, screenHeight);
mouse->setMouseInCenter();
2021-09-13 15:53:43 +03:00
while (screen->isOpen()) {
screen->clear();
Time::update();
update();
2021-09-13 15:53:43 +03:00
world->garbageCollector();
/* Project all mesh
* Here we project all _tris for each body from world._objects.
2021-09-13 15:53:43 +03:00
* When we call camera.project(m.second),
*/
// sometimes we dont need to update physics world
// (for example in menu or while pause)
// hence we can set '_updateWorld' equal to false in setUpdateWorld(bool):
if(_updateWorld) {
2021-09-13 15:53:43 +03:00
Timeline::update();
camera->clear();
world->update();
world->projectObjectsInCamera(camera);
// draw projected body
for (auto &t : camera->sorted())
screen->drawTriangle(t);
2021-09-13 15:53:43 +03:00
_triPerSec = camera->buffSize() * Time::fps();
printDebugText();
gui();
2021-09-13 15:53:43 +03:00
}
screen->display();
}
exit();
}
void Engine::exit() {
if(screen->isOpen()) {
screen->close();
}
ResourceManager::unloadAllResources();
2021-10-03 07:47:05 +03:00
Log::log("Engine::exit(): exit engine (" + std::to_string(screen->width()) + " _x " + std::to_string(screen->height()) + ") with title '" +
screen->title() + "'.");
}
void Engine::printDebugText() const {
if (_debugText) {
screen->debugText(_name + "\n\n X: " +
2021-10-02 20:36:07 +03:00
std::to_string((camera->position().x())) + "\n Y: " +
std::to_string((camera->position().y())) + "\n Z: " +
std::to_string((camera->position().z())) + "\n\n" +
2021-10-03 07:47:05 +03:00
std::to_string(screen->width()) + "_x" +
std::to_string(screen->height()) + "\n" +
std::to_string(Time::fps()) +
" fps \n" + std::to_string((int) _triPerSec) + " _tris/s");
}
2021-09-13 15:53:43 +03:00
}