Collision Rework, started adding directions to the collision (WIP)

This commit is contained in:
Bram Verhulst
2024-03-17 15:53:48 +01:00
parent d6c5cfa47b
commit 05f46b7eba
5 changed files with 42 additions and 21 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include <array>
#include <cmath>
#include <map>
#include "structs.h"
#include "utils.h"
@@ -10,6 +11,13 @@ class WorldTile;
namespace Collision
{
enum CollisionDirection {
Top,
Bottom,
Left,
Right
};
struct CollisionRect
{
@@ -17,19 +25,25 @@ namespace Collision
Point2f size;
Point2f vel;
std::array<Collision::CollisionRect*, 4> contact;
std::map<CollisionDirection, CollisionRect*> ContactMap;
};
struct TileCollisionRect : public CollisionRect
struct TileCollisionRect
{
TileCollisionRect(const Point2f& pos, const Point2f& size, WorldTile* tile)
: CollisionRect{ pos, size, Point2f{ 0, 0 }, { nullptr, nullptr, nullptr, nullptr } }
, tile{ tile }
{}
Point2f pos;
Point2f size;
Point2f vel;
TileCollisionRect(const Point2f& pos, const Point2f& size, WorldTile* tile);
WorldTile* tile;
std::map<CollisionDirection, TileCollisionRect*> ContactMap;
bool Contains(Point2f point2_f) {
return utils::IsPointInRect(point2_f, Rectf{ pos.x, pos.y, size.x, size.y });
}
Collision::CollisionRect getCollisionRect() {
return Collision::CollisionRect{ pos, size, vel };
}
};
bool PointVsRect(const Point2f p, const CollisionRect& r);