Files
2024-05-16 02:04:36 +02:00

93 lines
2.4 KiB
C++

#include "pch.h"
#include "Game.h"
#include <ostream>
#include <algorithm>
#include "colors.h"
#include "GridSystem/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();
}
}