forked from MoonsideGames/MoonWorks
expose Line properties + no-ID retrieve
parent
be4b5cf2c7
commit
27e0404ec0
|
@ -8,8 +8,8 @@ namespace MoonWorks.Collision
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public struct Line : IShape2D, System.IEquatable<Line>
|
public struct Line : IShape2D, System.IEquatable<Line>
|
||||||
{
|
{
|
||||||
private Vector2 Start { get; }
|
public Vector2 Start { get; }
|
||||||
private Vector2 End { get; }
|
public Vector2 End { get; }
|
||||||
|
|
||||||
public AABB2D AABB { get; }
|
public AABB2D AABB { get; }
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,43 @@ namespace MoonWorks.Collision
|
||||||
FreeHashSet(returned);
|
FreeHashSet(returned);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves all the potential collisions of a shape-transform pair.
|
||||||
|
/// </summary>
|
||||||
|
public IEnumerable<(T, ICollidable, Transform2D, uint)> Retrieve(ICollidable shape, Transform2D transform2D, uint collisionMask = uint.MaxValue)
|
||||||
|
{
|
||||||
|
var returned = AcquireHashSet();
|
||||||
|
|
||||||
|
var box = shape.TransformedAABB(transform2D);
|
||||||
|
var (minX, minY) = Hash(box.Min);
|
||||||
|
var (maxX, maxY) = Hash(box.Max);
|
||||||
|
|
||||||
|
if (minX < MinX) { minX = MinX; }
|
||||||
|
if (maxX > MaxX) { maxX = MaxX; }
|
||||||
|
if (minY < MinY) { minY = MinY; }
|
||||||
|
if (maxY > MaxY) { maxY = MaxY; }
|
||||||
|
|
||||||
|
foreach (var key in Keys(minX, minY, maxX, maxY))
|
||||||
|
{
|
||||||
|
if (hashDictionary.ContainsKey(key))
|
||||||
|
{
|
||||||
|
foreach (var t in hashDictionary[key])
|
||||||
|
{
|
||||||
|
if (!returned.Contains(t))
|
||||||
|
{
|
||||||
|
var (otherShape, otherTransform, collisionGroups) = IDLookup[t];
|
||||||
|
if (((collisionGroups & collisionMask) > 0) && AABB2D.TestOverlap(box, otherShape.TransformedAABB(otherTransform)))
|
||||||
|
{
|
||||||
|
returned.Add(t);
|
||||||
|
yield return (t, otherShape, otherTransform, collisionGroups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FreeHashSet(returned);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retrieves objects based on a pre-transformed AABB.
|
/// Retrieves objects based on a pre-transformed AABB.
|
||||||
|
|
Loading…
Reference in New Issue