#include #include "pch.h" #include "Game.h" #include #include #include "colors.h" #include "utils.h" #include "WorldLevel.h" Rectf Game::VIEWPORT{}; Game::Game(const Window& window) : BaseGame { window }, m_Camera(Camera()), m_WorldLevel(WorldLevel(&m_Camera, GetViewPort())) { Initialize(); Game::VIEWPORT = GetViewPort(); //TODO: See if this can be removed } Game::~Game() { Cleanup(); } void Game::Initialize() { m_Camera.SetPosition(Point2f{-GetViewPort().width / 2, -GetViewPort().height / 2}); } void Game::Cleanup() { } void Game::Update(float elapsedSec) { const Uint8* pStates = SDL_GetKeyboardState(nullptr); if(m_IsRightMouseDown) { Point2f newCameraPos = Point2f{m_MousePos.x + m_MouseOffset.x, m_MousePos.y + m_MouseOffset.y}; m_Camera.SetPosition(Point2f{-newCameraPos.x, -newCameraPos.y}); } else { m_MouseOffset = m_Camera.GetPosition(); } m_WorldLevel.Update(elapsedSec); } void Game::Draw() const { utils::ClearBackground(Color4f(0.0f, 0.0f, 0.3f, 1.0f)); m_WorldLevel.Draw(); TextureManager::GetInstance()->GetTexture("dingus.png")->Draw(Point2f{0,0}, {}, true); TextureManager::GetInstance()->GetTexture("dingus.png")->Draw(Point2f{0,300}, {}, false); } void Game::ProcessKeyDownEvent(const SDL_KeyboardEvent& e) { //std::cout << "KEYDOWN event: " << e.keysym.sym << std::endl; } void Game::ProcessKeyUpEvent(const SDL_KeyboardEvent& e) { } void Game::ProcessMouseMotionEvent(const SDL_MouseMotionEvent& e) { m_MousePos = Point2f{float(e.x), float(e.y)}; m_WorldLevel.MouseMove(Point2f { float(e.x), float(e.y) }); } void Game::ProcessMouseDownEvent(const SDL_MouseButtonEvent& e) { m_IsRightMouseDown = e.button == SDL_BUTTON_RIGHT; m_MouseOffset = Point2f{-m_Camera.GetPosition().x - m_MousePos.x, -m_Camera.GetPosition().y - m_MousePos.y}; } void Game::ProcessMouseUpEvent(const SDL_MouseButtonEvent& e) { m_IsRightMouseDown = e.button == SDL_BUTTON_RIGHT ? false : m_IsRightMouseDown; //std::cout << "MOUSEBUTTONUP event: "; //switch ( e.button ) //{ //case SDL_BUTTON_LEFT: // std::cout << " left button " << std::endl; // break; //case SDL_BUTTON_RIGHT: // std::cout << " right button " << std::endl; // break; //case SDL_BUTTON_MIDDLE: // std::cout << " middle button " << std::endl; // break; //} } void Game::ProcessImGui() { m_WorldLevel.ProcessImGui(); }