19 #ifndef B2_COLLISION_H 20 #define B2_COLLISION_H 165 bool IsValid()
const;
170 return 0.5f * (lowerBound + upperBound);
176 return 0.5f * (upperBound - lowerBound);
182 float32 wx = upperBound.x - lowerBound.x;
183 float32 wy = upperBound.y - lowerBound.y;
184 return 2.0f * (wx + wy);
205 result = result && lowerBound.x <= aabb.
lowerBound.
x;
206 result = result && lowerBound.y <= aabb.
lowerBound.
y;
207 result = result && aabb.
upperBound.
x <= upperBound.x;
208 result = result && aabb.
upperBound.
y <= upperBound.y;
256 b2Vec2 d = upperBound - lowerBound;
257 bool valid = d.
x >= 0.0f && d.
y >= 0.0f;
258 valid = valid && lowerBound.IsValid() && upperBound.IsValid();
268 if (d1.
x > 0.0f || d1.
y > 0.0f)
271 if (d2.
x > 0.0f || d2.
y > 0.0f)
point was removed in the update
int32 b2ClipSegmentToLine(b2ClipVertex vOut[2], const b2ClipVertex vIn[2], const b2Vec2 &normal, float32 offset, int32 vertexIndexA)
Clipping for contact manifolds.
void Combine(const b2AABB &aabb)
Combine an AABB into this one.
b2Vec2 GetCenter() const
Get the center of the AABB.
Used for computing contact manifolds.
b2Vec2 localNormal
not use for Type::e_points
b2Vec2 lowerBound
the lower vertex
void b2CollidePolygonAndCircle(b2Manifold *manifold, const b2PolygonShape *polygonA, const b2Transform &xfA, const b2CircleShape *circleB, const b2Transform &xfB)
Compute the collision manifold between a polygon and a circle.
void b2CollideCircles(b2Manifold *manifold, const b2CircleShape *circleA, const b2Transform &xfA, const b2CircleShape *circleB, const b2Transform &xfB)
Compute the collision manifold between two circles.
bool Contains(const b2AABB &aabb) const
Does this aabb contain the provided AABB.
b2Vec2 normal
world vector pointing from A to B
b2ContactID id
uniquely identifies a contact point between two shapes
#define b2_maxManifoldPoints
b2Vec2 GetExtents() const
Get the extents of the AABB (half-widths).
void b2CollideEdgeAndCircle(b2Manifold *manifold, const b2EdgeShape *polygonA, const b2Transform &xfA, const b2CircleShape *circleB, const b2Transform &xfB)
Compute the collision manifold between an edge and a circle.
const uint8 b2_nullFeature
bool b2TestOverlap(const b2Shape *shapeA, int32 indexA, const b2Shape *shapeB, int32 indexB, const b2Transform &xfA, const b2Transform &xfB)
Determine if two generic shapes overlap.
int32 pointCount
the number of manifold points
b2Vec2 localPoint
usage depends on manifold type
float32 tangentImpulse
the friction impulse
b2Vec2 localPoint
usage depends on manifold type
void b2CollidePolygons(b2Manifold *manifold, const b2PolygonShape *polygonA, const b2Transform &xfA, const b2PolygonShape *polygonB, const b2Transform &xfB)
Compute the collision manifold between two polygons.
An axis aligned bounding box.
b2PointState
This is used for determining the state of contact points.
point persisted across the update
float32 GetPerimeter() const
Get the perimeter length.
void b2GetPointStates(b2PointState state1[b2_maxManifoldPoints], b2PointState state2[b2_maxManifoldPoints], const b2Manifold *manifold1, const b2Manifold *manifold2)
void Combine(const b2AABB &aabb1, const b2AABB &aabb2)
Combine two AABBs into this one.
bool IsValid() const
Verify that the bounds are sorted.
point was added in the update
This is used to compute the current state of a contact manifold.
b2Vec2 upperBound
the upper vertex
float32 normalImpulse
the non-penetration impulse
void b2CollideEdgeAndPolygon(b2Manifold *manifold, const b2EdgeShape *edgeA, const b2Transform &xfA, const b2PolygonShape *circleB, const b2Transform &xfB)
Compute the collision manifold between an edge and a circle.