Collision reworked into a Collision Namespace

Added basic player (Needs work)
This commit is contained in:
Bram Verhulst
2024-03-13 01:09:12 +01:00
parent d0781db9f0
commit d6c5cfa47b
12 changed files with 308 additions and 67 deletions

44
Engine/Collision.h Normal file
View File

@@ -0,0 +1,44 @@
#pragma once
#include <array>
#include <cmath>
#include "structs.h"
#include "utils.h"
class WorldTile;
namespace Collision
{
struct CollisionRect
{
Point2f pos;
Point2f size;
Point2f vel;
std::array<Collision::CollisionRect*, 4> contact;
};
struct TileCollisionRect : public CollisionRect
{
TileCollisionRect(const Point2f& pos, const Point2f& size, WorldTile* tile)
: CollisionRect{ pos, size, Point2f{ 0, 0 }, { nullptr, nullptr, nullptr, nullptr } }
, tile{ tile }
{}
WorldTile* tile;
bool Contains(Point2f point2_f) {
return utils::IsPointInRect(point2_f, Rectf{ pos.x, pos.y, size.x, size.y });
}
};
bool PointVsRect(const Point2f p, const CollisionRect& r);
bool RectVsRect(const CollisionRect& r1, const CollisionRect r2);
bool RayVsRect(const Point2f& rayOrigin, const Point2f& rayDirection, const Collision::CollisionRect target, Point2f& contactPoint, Point2f& contactNormal, float& t_HitNear);
bool DynamicRectVsRect(const CollisionRect& dynamicRectangle, float ElapsedTime, const CollisionRect& staticRectangle, Point2f& contactPoint, Point2f& contactNormal, float& contactTime);
bool ResolveDynamicRectVsRect(CollisionRect& dynamicRectangle, float ElapsedTime, CollisionRect* staticRectangle);
}