mitiru::physics2d
2D physics: bodies, fixtures, broadphase, contact resolution.
2D physics: bodies, fixtures, broadphase, contact resolution.
| Name | Kind | Items |
|---|---|---|
AABBCollider2D | struct | 2 |
OBBCollider2D | struct | 2 |
WorldAABB2D | struct | 1 |
SpatialHashGrid | class | 7 |
PhysicsWorld2D | class | 19 |
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) noexceptinline 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) noexceptinline void resolve(const Contact2D& ct, RigidBody2D& a, RigidBody2D& b) noexceptstruct AABBCollider2D 2
[[nodiscard]] constexpr sgc::Vec2f center() const noexcept[[nodiscard]] constexpr sgc::Vec2f halfExtents() const noexceptstruct OBBCollider2D 2
[[nodiscard]] sgc::Vec2f axis(float bodyAngle, int idx) const noexceptvoid worldVertices(const sgc::Vec2f& wc, float bodyAngle, sgc::Vec2f v[4]) const noexceptstruct WorldAABB2D 1
[[nodiscard]] constexpr bool overlaps(const WorldAABB2D& o) const noexceptclass SpatialHashGrid 7
explicit SpatialHashGrid(float cellSize = 2.0f) noexceptvoid setCellSize(float s) noexcept[[nodiscard]] constexpr float cellSize() const noexceptvoid clear() noexceptvoid 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 noexceptclass PhysicsWorld2D 19
PhysicsWorld2D() = defaultvoid setGravity(const sgc::Vec2f& g) noexcept[[nodiscard]] constexpr const sgc::Vec2f& gravity() const noexceptBodyId addBody(RigidBody2D body) noexceptvoid removeBody(BodyId id) noexcept[[nodiscard]] RigidBody2D* getBody(BodyId id) noexcept[[nodiscard]] const RigidBody2D* getBody(BodyId id) const noexceptvoid setCollider(BodyId id, Collider2D c) noexcept[[nodiscard]] std::size_t bodyCount() const noexceptvoid setCellSize(float s) noexceptvoid setSolverIterations(int n) noexceptvoid onCollisionEnter(CollisionCallback2D cb) noexceptvoid onCollisionExit(CollisionCallback2D cb) noexceptvoid 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 noexceptSourced from docs/API_CATALOG.md, auto-generated by tools/generate_api_catalog.py.