#include "pch.h" #include "Game.h" #include #include #include "colors.h" #include "GroundTileTypeManager.h" #include "utils.h" #include "GridSystem/WorldTile.h" #include "Levels/World/WorldLevel.h" Rectf Game::VIEWPORT {}; Game::Game(const Window& window) : BaseGame { window }, m_Camera(Camera()), m_WorldLevel(WorldLevel(&m_Camera, GetViewPort())), m_MainMenuLevel(MainMenuLevel(&m_Camera)), m_pCurrentLevel(&m_WorldLevel) { Initialize(); Game::VIEWPORT = GetViewPort(); //TODO: See if this can be removed } Game::~Game() { Cleanup(); } void Game::Initialize() { m_Camera.SetPosition(Vector2f { -GetViewPort().width / 2, -GetViewPort().height / 2 }); } void Game::Cleanup() { ScreenManager::DestroyInstance(); GroundTileTypeManager::DestroyInstance(); TextureManager::DestroyInstance(); } void Game::Update(float elapsedSec) { const Uint8* pStates = SDL_GetKeyboardState(nullptr); if (m_IsRightMouseDown) { const Vector2f newCameraPos = Vector2f { m_MousePosition.x + m_MouseOffset.x, m_MousePosition.y + m_MouseOffset.y }; m_Camera.SetPosition(Vector2f { -newCameraPos.x, -newCameraPos.y }); } else { m_MouseOffset = m_Camera.GetPosition(); } m_pCurrentLevel->Update(elapsedSec); } void Game::Draw() const { utils::ClearBackground(Color4f(0.0f, 0.0f, 0.3f, 1.0f)); m_pCurrentLevel->Draw(); } void Game::ProcessKeyDownEvent(const SDL_KeyboardEvent& e) { //std::cout << "KEYDOWN event: " << e.keysym.sym << std::endl; if(e.keysym.sym == SDLK_BACKQUOTE) { m_imGui = !m_imGui; } } void Game::ProcessKeyUpEvent(const SDL_KeyboardEvent& e) { } void Game::ProcessMouseMotionEvent(const SDL_MouseMotionEvent& e) { m_MousePosition = Vector2f { float(e.x), float(e.y) }; m_pCurrentLevel->MouseMove(Vector2f { float(e.x), float(e.y) }); } void Game::ProcessMouseDownEvent(const SDL_MouseButtonEvent& e) { m_IsRightMouseDown = e.button == SDL_BUTTON_RIGHT; m_MouseOffset = Vector2f { -m_Camera.GetPosition().x - m_MousePosition.x, -m_Camera.GetPosition().y - m_MousePosition.y }; } void Game::ProcessMouseUpEvent(const SDL_MouseButtonEvent& e) { m_IsRightMouseDown = e.button == SDL_BUTTON_RIGHT ? false : m_IsRightMouseDown; } void Game::ProcessMouseWheelEvent(const SDL_MouseWheelEvent& e) { float newScale = m_Camera.GetScale() - e.preciseY * 0.1f; if(newScale < 0.0f) { newScale = 0.0f; } m_Camera.SetScale(newScale); } void Game::ProcessImGui() { if(m_imGui) { m_pCurrentLevel->ProcessImGui(); } }