mirror of
https://github.com/HowestDAE/dae16-VerhulstBram.git
synced 2025-12-16 03:41:48 +01:00
Fix camera, added more collsion stuff
added pink color
This commit is contained in:
@@ -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 );
|
||||
|
||||
@@ -31,8 +31,12 @@ namespace Collision
|
||||
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);
|
||||
WorldTile* tile;
|
||||
|
||||
|
||||
@@ -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 };
|
||||
}
|
||||
|
||||
@@ -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 };
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ public:
|
||||
|
||||
void ProcessImGui() override;
|
||||
|
||||
static Rectf VIEWPORT;
|
||||
|
||||
private:
|
||||
// FUNCTIONS
|
||||
void Initialize();
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#include <iostream>
|
||||
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;
|
||||
|
||||
@@ -13,8 +13,6 @@ public:
|
||||
virtual void MouseMove(const Point2f& mousePos) = 0;
|
||||
virtual void ProcessImGui() = 0;
|
||||
|
||||
private:
|
||||
|
||||
protected:
|
||||
Camera* m_pCamera;
|
||||
};
|
||||
|
||||
@@ -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<int, float> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Collision::CollisionDirection, WorldTile*> m_ContactMap{};
|
||||
std::map<Collision::CollisionDirection, WorldTile*> m_ContactMap;
|
||||
|
||||
Point2f m_Acc{};
|
||||
Point2f m_Acc;
|
||||
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 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});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user