ProtoTank/ProtoTank.cpp

104 lines
2.8 KiB
C++

#include <stdexcept>
#include <SFML/Window/Event.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/Window/ContextSettings.hpp>
#include "icon.h"
#include "Engine/Misc/Logger.hpp"
#include "Game.hpp"
static std::shared_ptr<sf::RenderWindow> InitWindow();
int main(int argc, char** argv) {
Logger& log = Logger::getInstance();
log.PrintInfo(LOGGER_MSG_FT("Create main window"));
std::shared_ptr<sf::RenderWindow> mainWindow = nullptr;
try {
mainWindow = InitWindow();
} catch (const std::exception& ex) {
log.PrintCritical(std::string(ex.what()));
return EXIT_FAILURE;
}
log.PrintInfo(LOGGER_MSG_FT("Create game instance"));
Game& arcadeGame = Game::getInstance(mainWindow, true);
GAME_STATUS status = GAME_INIT;
for ( ;; ) {
sf::Event event;
while (mainWindow->pollEvent(event)) {
if (event.type == sf::Event::Closed)
switch (event.type) {
case sf::Event::Closed:
mainWindow->close();
break;
case sf::Event::Resized:
//TODO: Recreate window related resource
//event.size.width
//event.size.height
break;
//case sf::Event::LostFocus:
// pause();
// break;
//case sf::Event::GainedFocus:
// resume();
// break;
default:
break;
}
// Focus only actions
if (mainWindow->hasFocus()) {
switch (event.type) {
case sf::Event::MouseMoved:
arcadeGame.EventMouseMoved(event.mouseMove.x, event.mouseMove.y);
break;
default:
break;
}
}
}
status = arcadeGame.Tick();
if (status == GAME_QUIT)
break;
}
log.PrintInfo(LOGGER_MSG_FT("Bye bye!"));
return EXIT_SUCCESS;
}
static std::shared_ptr<sf::RenderWindow> InitWindow() {
// Create default game window
sf::ContextSettings sWindowSettings;
sWindowSettings.depthBits = 0;
sWindowSettings.stencilBits = 0;
sWindowSettings.antialiasingLevel = 8;
sWindowSettings.sRgbCapable = true;
auto wnd = std::make_shared<sf::RenderWindow>(
sf::VideoMode(1280, 720), "ProtoTank",
(sf::Style::Close | sf::Style::Titlebar),
sWindowSettings
);
if (wnd == nullptr)
throw std::runtime_error("Failed to create the window");
wnd->setVerticalSyncEnabled(false); // Never use simultaneously with framerate limiter
wnd->setFramerateLimit(60); // Never use simultaneously with VSync
wnd->setKeyRepeatEnabled(false);
wnd->setMouseCursorVisible(true);
wnd->setIcon(64, 64, _aicon_bin);
return wnd;
}