diff --git a/Engine/Collision.cpp b/Engine/Collision.cpp index 0d13738..bdbe7f7 100644 --- a/Engine/Collision.cpp +++ b/Engine/Collision.cpp @@ -7,7 +7,7 @@ namespace Collision { - TileCollisionRect::TileCollisionRect(const Point2f& pos, const Point2f& size, WorldTile* tile): CollisionRect(pos, size), tile(tile) + TileCollisionRect::TileCollisionRect(const Point2f& pos, const Point2f& size, WorldTile* tile): pos(pos), size(size), tile(tile) {} bool PointVsRect(const Point2f p, const Collision::CollisionRect& r) { return ( p.x >= r.pos.x && p.y >= r.pos.y && p.x < r.pos.x + r.size.x && p.y < r.pos.y + r.size.y ); diff --git a/Engine/Collision.h b/Engine/Collision.h index ec84d2c..93be75a 100644 --- a/Engine/Collision.h +++ b/Engine/Collision.h @@ -31,8 +31,12 @@ namespace Collision std::map ContactMap{}; }; - struct TileCollisionRect : virtual public CollisionRect + struct TileCollisionRect { + Point2f pos; + Point2f size; + Point2f vel; + TileCollisionRect(const Point2f& pos, const Point2f& size, WorldTile* tile); WorldTile* tile; diff --git a/Engine/colors.h b/Engine/colors.h index 73e7630..28b1afc 100644 --- a/Engine/colors.h +++ b/Engine/colors.h @@ -13,4 +13,5 @@ namespace Colors const Color4f YELLOW{ 1.0f, 1.0f, 0.0f, 1.0f }; const Color4f MAGENTA{ 1.0f, 0.0f, 1.0f, 1.0f }; const Color4f CYAN{ 0.0f, 1.0f, 1.0f, 1.0f }; + const Color4f PINK{ 1.0f, 0.0f, 0.5f, 1.0f }; } diff --git a/Game/Camera.cpp b/Game/Camera.cpp index 1d778f5..623bd68 100644 --- a/Game/Camera.cpp +++ b/Game/Camera.cpp @@ -3,11 +3,11 @@ Camera::Camera() : m_Position { 0, 0 }, m_Scale { 1.0f } { } -Camera::Camera(const Point2f& position, const float scale) : m_Position { position }, m_Scale { scale } { -} -Camera::~Camera() { + +Camera::Camera(const Point2f& position, float scale) : m_Position { position }, m_Scale { scale } { } + void Camera::BeginRendering() const { glPushMatrix(); glTranslatef(m_Position.x, m_Position.y, 0); @@ -17,7 +17,7 @@ void Camera::BeginRendering() const { void Camera::EndRendering() const { glPopMatrix(); } + Point2f Camera::TransformMouse(const Point2f& mousePos) const { - const Point2f translatedPosition = Point2f{ mousePos.x - m_Position.x, Viewport.height - mousePos.y - m_Position.y}; - return translatedPosition; + return Point2f { mousePos.x - m_Position.x, Viewport.height - mousePos.y - m_Position.y }; } diff --git a/Game/Camera.h b/Game/Camera.h index 4ec06aa..7b2a8b2 100644 --- a/Game/Camera.h +++ b/Game/Camera.h @@ -5,7 +5,7 @@ class Camera public: Camera( ); Camera( const Point2f& position, float scale = 1); - virtual ~Camera(); + ~Camera() = default; void SetPosition( const Point2f& position ) { m_Position = position; } void SetScale( const float scale ) { m_Scale = scale; } @@ -23,5 +23,4 @@ public: private: Point2f m_Position; float m_Scale; - }; diff --git a/Game/Game.cpp b/Game/Game.cpp index d036a76..0477994 100644 --- a/Game/Game.cpp +++ b/Game/Game.cpp @@ -9,10 +9,14 @@ #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() { @@ -28,18 +32,6 @@ void Game::Cleanup() { void Game::Update(float elapsedSec) { const Uint8* pStates = SDL_GetKeyboardState(nullptr); - // if (pStates[SDL_SCANCODE_RIGHT]) { - // m_CameraOffset.x += 200 * elapsedSec; - // } - // if (pStates[SDL_SCANCODE_LEFT]) { - // m_CameraOffset.x -= 200 * elapsedSec; - // } - // if (pStates[SDL_SCANCODE_UP]) { - // m_CameraOffset.y += 200 * elapsedSec; - // } - // if (pStates[SDL_SCANCODE_DOWN]) { - // m_CameraOffset.y -= 200 * elapsedSec; - // } if(m_IsRightMouseDown) { Point2f newCameraPos = m_MousePos + m_MouseOffset; @@ -50,9 +42,9 @@ void Game::Update(float elapsedSec) { m_WorldLevel.Update(elapsedSec); - } + void Game::Draw() const { utils::ClearBackground(Color4f(0.0f, 0.0f, 0.3f, 1.0f)); m_WorldLevel.Draw(); @@ -66,8 +58,8 @@ 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(m_MousePos); + 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) { @@ -92,8 +84,5 @@ void Game::ProcessMouseUpEvent(const SDL_MouseButtonEvent& e) { //} } void Game::ProcessImGui() { - - - m_WorldLevel.ProcessImGui(); } diff --git a/Game/Game.h b/Game/Game.h index 52dd4ec..51f853b 100644 --- a/Game/Game.h +++ b/Game/Game.h @@ -29,6 +29,8 @@ public: void ProcessImGui() override; + static Rectf VIEWPORT; + private: // FUNCTIONS void Initialize(); diff --git a/Game/Game.vcxproj b/Game/Game.vcxproj index 99638eb..893b3a5 100644 --- a/Game/Game.vcxproj +++ b/Game/Game.vcxproj @@ -109,7 +109,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - Create + NotUsing pch.h diff --git a/Game/Level.cpp b/Game/Level.cpp index 94e88b9..d0bd54a 100644 --- a/Game/Level.cpp +++ b/Game/Level.cpp @@ -3,7 +3,7 @@ #include Level::Level() : m_pCamera(nullptr) { - std::cout << "Cannot make level without a camera" << std::endl; + std::cout << "Cannot make level without a camera, Duh 🙄" << std::endl; } Level::Level(Camera* camera) { m_pCamera = camera; diff --git a/Game/Level.h b/Game/Level.h index b5aff35..9f016b6 100644 --- a/Game/Level.h +++ b/Game/Level.h @@ -13,8 +13,6 @@ public: virtual void MouseMove(const Point2f& mousePos) = 0; virtual void ProcessImGui() = 0; -private: - protected: Camera* m_pCamera; }; diff --git a/Game/Player.cpp b/Game/Player.cpp index 874f546..845ee53 100644 --- a/Game/Player.cpp +++ b/Game/Player.cpp @@ -7,15 +7,19 @@ #include "utils.h" #include "WorldLevel.h" -Player::Player(const Point2f& Position) : m_Position(Position), m_Size(Point2f{40, 40}) -{} +Player::Player(const Point2f& Position) : m_Position(Position), m_Size(Point2f{40, 40}), m_Vel(Point2f{0,0}), m_Acc(Point2f{0,0}) { + m_ContactMap[Collision::CollisionDirection::Top] = nullptr; + m_ContactMap[Collision::CollisionDirection::Bottom] = nullptr; + m_ContactMap[Collision::CollisionDirection::Left] = nullptr; + m_ContactMap[Collision::CollisionDirection::Right] = nullptr; +} Collision::CollisionRect Player::GetCollisionRect() { Collision::CollisionRect rect = {m_Position, m_Size, m_Vel}; return rect; } void Player::Draw() const { - utils::SetColor(Colors::RED); + utils::SetColor(Colors::PINK); utils::DrawRect(Rectf{m_Position.x, m_Position.y, m_Size.x, m_Size.y}); } @@ -61,10 +65,10 @@ void Player::Update(float elapsedTime, WorldLevel& level) { }); for (std::pair contact_time : contactTimes) { - int x = contact_time.first % level.WORLD_WIDTH; - int y = contact_time.first / level.WORLD_WIDTH; - WorldTile* tile2 = level.GetTileAt(Point2f{(float) x, (float) y}); - Collision::CollisionRect rect = tile2->GetCollisionRect().getCollisionRect(); //TODO: fix this mess + int x = contact_time.first % WorldLevel::WORLD_WIDTH; + int y = contact_time.first / WorldLevel::WORLD_WIDTH; + WorldTile* world_tile = level.GetTileAt(Point2f{(float) x, (float) y}); + Collision::CollisionRect rect = world_tile->GetCollisionRect().getCollisionRect(); //TODO: fix this mess Collision::ResolvePlayerVsRect(*this, elapsedTime, &rect); } diff --git a/Game/Player.h b/Game/Player.h index b794081..d1d9ec7 100644 --- a/Game/Player.h +++ b/Game/Player.h @@ -21,15 +21,13 @@ public: void SetContactMap(Collision::CollisionDirection dir, WorldTile* tile) { m_ContactMap[dir] = tile; } private: - Point2f m_Position{}; - Point2f m_Size{}; + Point2f m_Position; + Point2f m_Size; - Point2f m_Vel{}; + Point2f m_Vel; - std::map m_ContactMap{}; + std::map m_ContactMap; - Point2f m_Acc{}; + Point2f m_Acc; Point2f m_Gravity{ 0, -9.81f }; - float m_MaxSpeed{ 200 }; - }; diff --git a/Game/WorldLevel.cpp b/Game/WorldLevel.cpp index 7cc5efd..764ad7c 100644 --- a/Game/WorldLevel.cpp +++ b/Game/WorldLevel.cpp @@ -21,7 +21,8 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport): for (size_t x { 0 }; x < WORLD_WIDTH; ++x) { for (size_t y { 0 }; y < WORLD_HEIGHT; ++y) { int actualX = x - WORLD_WIDTH / 2; - m_worldTiles[x][y] = new WorldTile{ Point2f{ float(actualX * TILE_WIDTH), -float(y * TILE_HEIGHT) - TILE_HEIGHT}, GroundTileTypes::Dirt, TextureManager::GetInstance()}; + Point2f pos = Point2f{ float(actualX * TILE_WIDTH), -float(y * TILE_HEIGHT) - TILE_HEIGHT}; + m_worldTiles[x][y] = new WorldTile{ pos, GroundTileTypes::Dirt, TextureManager::GetInstance() }; } } @@ -125,6 +126,7 @@ void WorldLevel::ProcessImGui() { if(m_ShowCameraWindow) { ImGui::Begin("Camera", &m_ShowCameraWindow, ImGuiWindowFlags_AlwaysAutoResize); ImGui::Text("Camera Position: (%f, %f)", m_pCamera->GetPosition().x, m_pCamera->GetPosition().y); + ImGui::Text("Is Right Mouse Down: %s", utils::isMouseDown(0) ? "true" : "false"); if(ImGui::Button("Reset Camera")) { m_pCamera->SetPosition(Point2f{m_viewport.width / 2, m_viewport.height / 2}); }