Advertisement
Guest User

Untitled

a guest
Jul 9th, 2020
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. #include "pch.h"
  2. #include "Game.h"
  3. #include "SGame.h"
  4. #include "SMainMenu.h"
  5. #include "States.h"
  6.  
  7. #include "StateManager.h"
  8. #include "FontManager.h"
  9. #include "TextureManager.h"
  10. #include "SharedContext.h"
  11.  
  12. #include "DebugOverlay.h"
  13.  
  14.  
  15. Game::Game()
  16. {
  17.     m_context = std::make_unique<SharedContext>();
  18.     m_stateManager = std::make_unique<StateManager>(*m_context);
  19.     m_textureManager = std::make_unique<TextureManager>(false);
  20.     m_fontManager = std::make_unique<FontManager>();
  21.     m_debugOverlay = std::make_unique<DebugOverlay>();
  22.  
  23.     initWindow();
  24.     registerStates();
  25.  
  26.     m_context->window = m_window.get();
  27.     m_context->textureManager = m_textureManager.get();
  28.     m_context->fontManager = m_fontManager.get();
  29.  
  30.     initUI();
  31.  
  32.     m_stateManager->switchState(States::Sandbox);
  33. }
  34.  
  35. Game::~Game() {
  36.     m_deltaTime = 0;
  37.  
  38.     //Force correct order of destruction
  39.     m_stateManager.reset();
  40.     m_textureManager.reset();
  41.     m_fontManager.reset();
  42.  
  43.     m_window.reset();
  44.     m_context.reset();
  45. }
  46.  
  47. void Game::initWindow()
  48. {
  49.     m_defaultView = std::make_unique<sf::View>(
  50.         sf::FloatRect(0, 0, DEFAULT_SIZE.x, DEFAULT_SIZE.y));
  51.  
  52.     m_window = std::make_unique<sf::RenderWindow>(
  53.         sf::VideoMode(DEFAULT_SIZE.x, DEFAULT_SIZE.y, 0),
  54.         "Chess",
  55.         sf::Style::Titlebar | sf::Style::Close | sf::Style::Resize,
  56.         sf::ContextSettings(0, 0, 0));
  57.  
  58.     m_window->setView(*m_defaultView);
  59.  
  60.     //m_window.setFramerateLimit(60);
  61.     m_window->setVerticalSyncEnabled(true);
  62. }
  63.  
  64. void Game::initUI()
  65. {
  66.     //Set background application-wide
  67.     auto& bgtx = *m_textureManager->aquireAndGet(States::MainMenu, AssetFlags::t_background, "Assets\\Sprites\\backdrop.jpg");
  68.     m_backdrop.setTexture(bgtx, true);
  69.     auto& view = m_window->getView();
  70.     m_backdrop.setScale(
  71.         view.getSize().x / m_backdrop.getLocalBounds().width,
  72.         view.getSize().y / m_backdrop.getLocalBounds().height
  73.     );
  74. }
  75.  
  76. void Game::registerStates() {
  77.     m_stateManager->registerState<SGame>(States::Sandbox);
  78.     m_stateManager->registerState<SMainMenu>(States::MainMenu);
  79. }
  80.  
  81. void Game::update()
  82. {
  83.     if (m_stateManager->isEmpty())
  84.         m_window->close();
  85.  
  86.     sf::Event event;
  87.     while (m_window->pollEvent(event)) {
  88.  
  89.         switch (event.type) {
  90.  
  91.         case sf::Event::Closed:
  92.             m_window->close();
  93.             break;
  94.  
  95.         case sf::Event::Resized:
  96.             auto newSize = Graphics::clampWindow(*m_window, MIN_SIZE);
  97.             Graphics::applyResize(*m_defaultView, newSize.x, newSize.y);
  98.             break;
  99.         }
  100.  
  101.         //m_stateManager->handleEvent(event);
  102.     }
  103.  
  104.     //m_stateManager->update(m_deltaTime);
  105.  
  106. #ifdef NDEBUG
  107.     //m_debugOverlay->update(m_deltaTime);
  108. #endif
  109. }
  110.  
  111. void Game::render()
  112. {
  113.     m_window->clear(sf::Color::Black);
  114.  
  115.     m_window->setView(*m_defaultView);
  116.     m_window->draw(m_backdrop);
  117.  
  118.     //m_stateManager->render();
  119.  
  120. #ifdef NDEBUG
  121.     //m_window->setView(*m_defaultView);
  122.     //m_debugOverlay->draw(*m_window);
  123. #endif
  124.     m_window->display();
  125. }
  126.  
  127. void Game::lateUpdate()
  128. {
  129.     //m_stateManager->lateUpdate();
  130.     m_deltaTime = m_clock.restart().asSeconds();
  131. }
  132.  
  133. bool Game::isRunning() const {
  134.     return m_window->isOpen();
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement