Files
dae16-VerhulstBram-GameProject/Game/Game.cpp
2024-03-28 18:53:36 +01:00

88 lines
2.1 KiB
C++

#include <imgui.h>
#include "pch.h"
#include "Game.h"
#include <iostream>
#include <ostream>
#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();
}
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:k
// std::cout << " right button " << std::endl;
// break;
//case SDL_BUTTON_MIDDLE:
// std::cout << " middle button " << std::endl;
// break;
//}
}
void Game::ProcessImGui() {
m_WorldLevel.ProcessImGui();
}