mirror of
https://github.com/HowestDAE/dae16-VerhulstBram.git
synced 2026-02-04 16:29:23 +01:00
Fix camera, added more collsion stuff
added pink color
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
namespace Collision
|
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) {
|
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 );
|
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 );
|
||||||
|
|||||||
@@ -31,8 +31,12 @@ namespace Collision
|
|||||||
std::map<CollisionDirection, CollisionRect*> ContactMap{};
|
std::map<CollisionDirection, CollisionRect*> ContactMap{};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TileCollisionRect : virtual public CollisionRect
|
struct TileCollisionRect
|
||||||
{
|
{
|
||||||
|
Point2f pos;
|
||||||
|
Point2f size;
|
||||||
|
Point2f vel;
|
||||||
|
|
||||||
TileCollisionRect(const Point2f& pos, const Point2f& size, WorldTile* tile);
|
TileCollisionRect(const Point2f& pos, const Point2f& size, WorldTile* tile);
|
||||||
WorldTile* tile;
|
WorldTile* tile;
|
||||||
|
|
||||||
|
|||||||
@@ -13,4 +13,5 @@ namespace Colors
|
|||||||
const Color4f YELLOW{ 1.0f, 1.0f, 0.0f, 1.0f };
|
const Color4f YELLOW{ 1.0f, 1.0f, 0.0f, 1.0f };
|
||||||
const Color4f MAGENTA{ 1.0f, 0.0f, 1.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 CYAN{ 0.0f, 1.0f, 1.0f, 1.0f };
|
||||||
|
const Color4f PINK{ 1.0f, 0.0f, 0.5f, 1.0f };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
|
|
||||||
Camera::Camera() : m_Position { 0, 0 }, m_Scale { 1.0f } {
|
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(const Point2f& position, float scale) : m_Position { position }, m_Scale { scale } {
|
||||||
Camera::~Camera() {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Camera::BeginRendering() const {
|
void Camera::BeginRendering() const {
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(m_Position.x, m_Position.y, 0);
|
glTranslatef(m_Position.x, m_Position.y, 0);
|
||||||
@@ -17,7 +17,7 @@ void Camera::BeginRendering() const {
|
|||||||
void Camera::EndRendering() const {
|
void Camera::EndRendering() const {
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
Point2f Camera::TransformMouse(const Point2f& mousePos) const {
|
Point2f Camera::TransformMouse(const Point2f& mousePos) const {
|
||||||
const Point2f translatedPosition = Point2f{ mousePos.x - m_Position.x, Viewport.height - mousePos.y - m_Position.y};
|
return Point2f { mousePos.x - m_Position.x, Viewport.height - mousePos.y - m_Position.y };
|
||||||
return translatedPosition;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class Camera
|
|||||||
public:
|
public:
|
||||||
Camera( );
|
Camera( );
|
||||||
Camera( const Point2f& position, float scale = 1);
|
Camera( const Point2f& position, float scale = 1);
|
||||||
virtual ~Camera();
|
~Camera() = default;
|
||||||
|
|
||||||
void SetPosition( const Point2f& position ) { m_Position = position; }
|
void SetPosition( const Point2f& position ) { m_Position = position; }
|
||||||
void SetScale( const float scale ) { m_Scale = scale; }
|
void SetScale( const float scale ) { m_Scale = scale; }
|
||||||
@@ -23,5 +23,4 @@ public:
|
|||||||
private:
|
private:
|
||||||
Point2f m_Position;
|
Point2f m_Position;
|
||||||
float m_Scale;
|
float m_Scale;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -9,10 +9,14 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "WorldLevel.h"
|
#include "WorldLevel.h"
|
||||||
|
|
||||||
|
|
||||||
|
Rectf Game::VIEWPORT{};
|
||||||
|
|
||||||
Game::Game(const Window& window)
|
Game::Game(const Window& window)
|
||||||
: BaseGame { window }, m_Camera(Camera()), m_WorldLevel(WorldLevel(&m_Camera, GetViewPort()))
|
: BaseGame { window }, m_Camera(Camera()), m_WorldLevel(WorldLevel(&m_Camera, GetViewPort()))
|
||||||
{
|
{
|
||||||
Initialize();
|
Initialize();
|
||||||
|
Game::VIEWPORT = GetViewPort(); //TODO: See if this can be removed
|
||||||
}
|
}
|
||||||
|
|
||||||
Game::~Game() {
|
Game::~Game() {
|
||||||
@@ -28,18 +32,6 @@ void Game::Cleanup() {
|
|||||||
|
|
||||||
void Game::Update(float elapsedSec) {
|
void Game::Update(float elapsedSec) {
|
||||||
const Uint8* pStates = SDL_GetKeyboardState(nullptr);
|
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) {
|
if(m_IsRightMouseDown) {
|
||||||
Point2f newCameraPos = m_MousePos + m_MouseOffset;
|
Point2f newCameraPos = m_MousePos + m_MouseOffset;
|
||||||
@@ -50,9 +42,9 @@ void Game::Update(float elapsedSec) {
|
|||||||
|
|
||||||
m_WorldLevel.Update(elapsedSec);
|
m_WorldLevel.Update(elapsedSec);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Game::Draw() const {
|
void Game::Draw() const {
|
||||||
utils::ClearBackground(Color4f(0.0f, 0.0f, 0.3f, 1.0f));
|
utils::ClearBackground(Color4f(0.0f, 0.0f, 0.3f, 1.0f));
|
||||||
m_WorldLevel.Draw();
|
m_WorldLevel.Draw();
|
||||||
@@ -66,8 +58,8 @@ void Game::ProcessKeyUpEvent(const SDL_KeyboardEvent& e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Game::ProcessMouseMotionEvent(const SDL_MouseMotionEvent& e) {
|
void Game::ProcessMouseMotionEvent(const SDL_MouseMotionEvent& e) {
|
||||||
m_MousePos = Point2f { float(e.x), float(e.y) };
|
m_MousePos = Point2f{float(e.x), float(e.y)};
|
||||||
m_WorldLevel.MouseMove(m_MousePos);
|
m_WorldLevel.MouseMove(Point2f { float(e.x), float(e.y) });
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::ProcessMouseDownEvent(const SDL_MouseButtonEvent& e) {
|
void Game::ProcessMouseDownEvent(const SDL_MouseButtonEvent& e) {
|
||||||
@@ -92,8 +84,5 @@ void Game::ProcessMouseUpEvent(const SDL_MouseButtonEvent& e) {
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
void Game::ProcessImGui() {
|
void Game::ProcessImGui() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_WorldLevel.ProcessImGui();
|
m_WorldLevel.ProcessImGui();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ public:
|
|||||||
|
|
||||||
void ProcessImGui() override;
|
void ProcessImGui() override;
|
||||||
|
|
||||||
|
static Rectf VIEWPORT;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// FUNCTIONS
|
// FUNCTIONS
|
||||||
void Initialize();
|
void Initialize();
|
||||||
|
|||||||
@@ -109,7 +109,7 @@
|
|||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
Level::Level() : m_pCamera(nullptr) {
|
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) {
|
Level::Level(Camera* camera) {
|
||||||
m_pCamera = camera;
|
m_pCamera = camera;
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ public:
|
|||||||
virtual void MouseMove(const Point2f& mousePos) = 0;
|
virtual void MouseMove(const Point2f& mousePos) = 0;
|
||||||
virtual void ProcessImGui() = 0;
|
virtual void ProcessImGui() = 0;
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Camera* m_pCamera;
|
Camera* m_pCamera;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -7,15 +7,19 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "WorldLevel.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 Player::GetCollisionRect() {
|
||||||
Collision::CollisionRect rect = {m_Position, m_Size, m_Vel};
|
Collision::CollisionRect rect = {m_Position, m_Size, m_Vel};
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::Draw() const {
|
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});
|
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<int, float> contact_time : contactTimes) {
|
for (std::pair<int, float> contact_time : contactTimes) {
|
||||||
int x = contact_time.first % level.WORLD_WIDTH;
|
int x = contact_time.first % WorldLevel::WORLD_WIDTH;
|
||||||
int y = contact_time.first / level.WORLD_WIDTH;
|
int y = contact_time.first / WorldLevel::WORLD_WIDTH;
|
||||||
WorldTile* tile2 = level.GetTileAt(Point2f{(float) x, (float) y});
|
WorldTile* world_tile = level.GetTileAt(Point2f{(float) x, (float) y});
|
||||||
Collision::CollisionRect rect = tile2->GetCollisionRect().getCollisionRect(); //TODO: fix this mess
|
Collision::CollisionRect rect = world_tile->GetCollisionRect().getCollisionRect(); //TODO: fix this mess
|
||||||
Collision::ResolvePlayerVsRect(*this, elapsedTime, &rect);
|
Collision::ResolvePlayerVsRect(*this, elapsedTime, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,15 +21,13 @@ public:
|
|||||||
void SetContactMap(Collision::CollisionDirection dir, WorldTile* tile) { m_ContactMap[dir] = tile; }
|
void SetContactMap(Collision::CollisionDirection dir, WorldTile* tile) { m_ContactMap[dir] = tile; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Point2f m_Position{};
|
Point2f m_Position;
|
||||||
Point2f m_Size{};
|
Point2f m_Size;
|
||||||
|
|
||||||
Point2f m_Vel{};
|
Point2f m_Vel;
|
||||||
|
|
||||||
std::map<Collision::CollisionDirection, WorldTile*> m_ContactMap{};
|
std::map<Collision::CollisionDirection, WorldTile*> m_ContactMap;
|
||||||
|
|
||||||
Point2f m_Acc{};
|
Point2f m_Acc;
|
||||||
Point2f m_Gravity{ 0, -9.81f };
|
Point2f m_Gravity{ 0, -9.81f };
|
||||||
float m_MaxSpeed{ 200 };
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport):
|
|||||||
for (size_t x { 0 }; x < WORLD_WIDTH; ++x) {
|
for (size_t x { 0 }; x < WORLD_WIDTH; ++x) {
|
||||||
for (size_t y { 0 }; y < WORLD_HEIGHT; ++y) {
|
for (size_t y { 0 }; y < WORLD_HEIGHT; ++y) {
|
||||||
int actualX = x - WORLD_WIDTH / 2;
|
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) {
|
if(m_ShowCameraWindow) {
|
||||||
ImGui::Begin("Camera", &m_ShowCameraWindow, ImGuiWindowFlags_AlwaysAutoResize);
|
ImGui::Begin("Camera", &m_ShowCameraWindow, ImGuiWindowFlags_AlwaysAutoResize);
|
||||||
ImGui::Text("Camera Position: (%f, %f)", m_pCamera->GetPosition().x, m_pCamera->GetPosition().y);
|
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")) {
|
if(ImGui::Button("Reset Camera")) {
|
||||||
m_pCamera->SetPosition(Point2f{m_viewport.width / 2, m_viewport.height / 2});
|
m_pCamera->SetPosition(Point2f{m_viewport.width / 2, m_viewport.height / 2});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user