public override object Clone() { AABBMask mask = new AABBMask(_point, _w, _h); mask._pos = _pos; return mask; }
public static bool TestOverlapEdge(AXLine xlMask, AABBMask rMask) { VectorFP r1 = (VectorFP)rMask._pos + rMask._point; VectorFP r2 = r1 + new VectorFP(rMask._w, rMask._h); return !(xlMask.Y > r2.Y || xlMask.Y < r1.Y || xlMask.Left > r2.X || xlMask.Right < r1.X); }
// AXLine -- [____] Collision + Edge Tests public static bool TestOverlapEdge(AXLineMask xlMask, AABBMask rMask) { FPInt py = xlMask._pos.Y + xlMask._p.Y; FPInt px1 = xlMask._pos.X + xlMask._p.X; FPInt px2 = px1 + xlMask._w; VectorFP r1 = (VectorFP)rMask._pos + rMask._point; VectorFP r2 = r1 + new VectorFP(rMask._w, rMask._h); return !(py > r2.Y || py < r1.Y || px1 > r2.X || px2 < r1.X); }
public static bool TestOverlapEdge(PointMask ptMask, AABBMask rMask) { VectorFP p0 = (VectorFP)ptMask._pos + ptMask._point; return TestOverlapEdge(rMask, p0.X, p0.Y); }
public static bool TestOverlapEdge(AABBMask rMask, FPInt x, FPInt y) { VectorFP p1 = (VectorFP)rMask._pos + rMask._point; return (x >= p1.X && x <= p1.X + rMask._w && y >= p1.Y && y <= p1.Y + rMask._h); }
public static bool TestOverlap(TriangleMask triMask, AABBMask rMask) { return TestOverlap(rMask, triMask); }
public static bool TestOverlap(AYLineMask ylMask, AABBMask rMask) { FPInt px = ylMask._pos.X + ylMask._p.X; FPInt py1 = ylMask._pos.Y + ylMask._p.Y; FPInt py2 = py1 + ylMask._h; VectorFP r1 = (VectorFP)rMask._pos + rMask._point; VectorFP r2 = r1 + new VectorFP(rMask._w, rMask._h); return !(px >= r2.X || px <= r1.X || py1 >= r2.Y || py2 <= r1.Y); }
public static bool TestOverlapEdge(AABBMask rMask, AYLine ylMask) { return TestOverlapEdge(ylMask, rMask); }
public static bool TestOverlap(AABBMask rMask, LineMask lnMask) { return TestOverlap(lnMask, rMask); }
public static bool TestOverlap(AABBMask rMask, AYLineMask ylMask) { return TestOverlap(ylMask, rMask); }
public static bool TestOverlap(AABBMask rMask, AXLineMask xlMask) { return TestOverlap(xlMask, rMask); }
public static bool TestOverlap(AABBMask rMask, CircleMask cMask) { return TestOverlap(cMask, rMask); }
// AABB -- [____] Collision Tests public static bool TestOverlap(AABBMask rMask, PointMask ptMask) { return TestOverlap(ptMask, rMask); }
public static bool TestOverlap(LineMask lnMask, AABBMask rMask) { VectorFP p0 = (VectorFP)lnMask._pos + lnMask._p0; VectorFP p1 = new VectorFP(p0.X + lnMask._w, p0.Y + lnMask._h); return rMask.IntersectsLine(p0, p1); }
// AYLine -- [____] Collision + Edge Tests public static bool TestOverlapEdge(AYLine ylMask, AABBMask rMask) { VectorFP r1 = (VectorFP)rMask._pos + rMask._point; VectorFP r2 = r1 + new VectorFP(rMask._w, rMask._h); return !(ylMask.Top > r2.Y || ylMask.Bottom < r1.Y || ylMask.X > r2.X || ylMask.X < r1.X); }
public static bool TestOverlapEdge(AABBMask rMask, AXLine xlMask) { return TestOverlapEdge(xlMask, rMask); }
public static bool TestOverlap(AABBMask rMask1, AABBMask rMask2) { VectorFP p0 = (VectorFP)rMask1._pos + rMask1._point; VectorFP p1 = (VectorFP)rMask2._pos + rMask2._point; FPInt x1 = p0.X + rMask1._w; FPInt x2 = p1.X + rMask2._w; FPInt y1 = p0.Y + rMask1._h; FPInt y2 = p1.Y + rMask2._h; return !(x1 <= p1.X || p0.X >= x2 || y1 <= p1.Y || p0.Y >= y2); }
public static bool TestOverlap(AABBMask rMask, TriangleMask triMask) { VectorFP a = (VectorFP)triMask._pos + triMask._p0; VectorFP b = (VectorFP)triMask._pos + triMask._p1; VectorFP c = (VectorFP)triMask._pos + triMask._p2; if (rMask.IntersectsLine(a, b) || rMask.IntersectsLine(b, c) || rMask.IntersectsLine(a, c)) { return true; } VectorFP r = rMask._pos + new VectorFP(rMask._point.X + (rMask._w >> 1), rMask._point.Y + (rMask._h >> 1)); VectorFP q = triMask.Barycentric(r); return (q.X >= 0 && q.Y >= 0 && (q.X + q.Y) <= 1); }
public static bool TestOverlap(CircleMask cMask, AABBMask rMask) { VectorFP p0 = (VectorFP)cMask._pos + cMask._p; VectorFP p1 = rMask.ClosestPoint(p0); FPInt dx = p1.X - p0.X; FPInt dy = p1.Y - p0.Y; FPInt d2 = dx * dx + dy * dy; FPInt r2 = cMask._radius * cMask._radius; return (d2 < r2); }