mitiru::physics2d

2D physics: bodies, fixtures, broadphase, contact resolution.

2D physics: bodies, fixtures, broadphase, contact resolution.

NameKindItems
AABBCollider2Dstruct2
OBBCollider2Dstruct2
WorldAABB2Dstruct1
SpatialHashGridclass7
PhysicsWorld2Dclass19

Free functions and typedefs

using BodyId = uint32_t;
using Collider2D = std::variant<CircleCollider2D, AABBCollider2D, OBBCollider2D>;
using CollisionCallback2D = std::function<void(const Contact2D&)>;
inline constexpr BodyId INVALID_BODY_ID = 0
[[nodiscard]] inline std::optional<Contact2D> circleVsCircle( const sgc::Vec2f& pA, float rA, const sgc::Vec2f& pB, float rB) noexcept
[[nodiscard]] inline std::optional<Contact2D> aabbVsAabb( const sgc::Vec2f& mnA, const sgc::Vec2f& mxA, const sgc::Vec2f& mnB, const sgc::Vec2f& mxB) noexcept
[[nodiscard]] inline std::optional<Contact2D> circleVsAabb( const sgc::Vec2f& cp, float r, const sgc::Vec2f& mn, const sgc::Vec2f& mx) noexcept
inline void project(const sgc::Vec2f* v, int n, const sgc::Vec2f& ax, float& lo, float& hi) noexcept
[[nodiscard]] inline std::optional<Contact2D> obbVsObb( const sgc::Vec2f& cA, const OBBCollider2D& oA, float aA, const sgc::Vec2f& cB, const OBBCollider2D& oB, float aB) noexcept
inline void resolve(const Contact2D& ct, RigidBody2D& a, RigidBody2D& b) noexcept
struct AABBCollider2D 2
[[nodiscard]] constexpr sgc::Vec2f center() const noexcept
[[nodiscard]] constexpr sgc::Vec2f halfExtents() const noexcept
struct OBBCollider2D 2
[[nodiscard]] sgc::Vec2f axis(float bodyAngle, int idx) const noexcept
void worldVertices(const sgc::Vec2f& wc, float bodyAngle, sgc::Vec2f v[4]) const noexcept
struct WorldAABB2D 1
[[nodiscard]] constexpr bool overlaps(const WorldAABB2D& o) const noexcept
class SpatialHashGrid 7
explicit SpatialHashGrid(float cellSize = 2.0f) noexcept
void setCellSize(float s) noexcept
[[nodiscard]] constexpr float cellSize() const noexcept
void clear() noexcept
void insert(BodyId id, const WorldAABB2D& aabb) noexcept
[[nodiscard]] std::vector<std::pair<BodyId, BodyId>> queryAllPairs() const noexcept
[[nodiscard]] std::vector<BodyId> query(const WorldAABB2D& aabb) const noexcept
class PhysicsWorld2D 19
PhysicsWorld2D() = default
void setGravity(const sgc::Vec2f& g) noexcept
[[nodiscard]] constexpr const sgc::Vec2f& gravity() const noexcept
BodyId addBody(RigidBody2D body) noexcept
void removeBody(BodyId id) noexcept
[[nodiscard]] RigidBody2D* getBody(BodyId id) noexcept
[[nodiscard]] const RigidBody2D* getBody(BodyId id) const noexcept
void setCollider(BodyId id, Collider2D c) noexcept
[[nodiscard]] std::size_t bodyCount() const noexcept
void setCellSize(float s) noexcept
void setSolverIterations(int n) noexcept
void onCollisionEnter(CollisionCallback2D cb) noexcept
void onCollisionExit(CollisionCallback2D cb) noexcept
void update(float dt) noexcept
[[nodiscard]] std::size_t lastContactCount() const noexcept
[[nodiscard]] std::optional<RaycastHit2D> raycast( const sgc::Vec2f& origin, const sgc::Vec2f& dir, float maxDist = 1e6f) const noexcept
[[nodiscard]] std::vector<BodyId> overlapCircle(const sgc::Vec2f& c, float r) const noexcept
[[nodiscard]] auto& bodies() noexcept
[[nodiscard]] const auto& bodies() const noexcept

Sourced from docs/API_CATALOG.md, auto-generated by tools/generate_api_catalog.py.