public bool Overlaps(Shape shape, T attributes, out CollisionResult result) { result = new CollisionResult(this); var collide = false; if (IsCollidable && shape != null) { var region = shape.Bounds .ToGrid(TileSize.ToVector2(), AbsolutePosition); foreach (var location in PlotRegion(region)) { Manifold hit = default; var tile = GetTileShape(location); var overlaps = tile?.Overlaps(shape, out hit) ?? false; if (overlaps && HasTags(location, attributes)) { hit.Normal = -hit.Normal; result.Add(hit); collide = true; } } } return(collide); }
public sealed override bool Overlaps(Collider collider, out CollisionResult result) { if (base.Overlaps(collider, out result)) { if (collider is ShapeCollider) { var collide = false; var shape = (collider as ShapeCollider).Shape; var region = shape.Bounds .ToGrid(TileSize.ToVector2(), AbsolutePosition); foreach (var location in PlotRegion(region)) { Manifold hit = default; var tile = GetTileShape(location); var overlaps = tile?.Overlaps(shape, out hit) ?? false; if (overlaps) { hit.Normal = -hit.Normal; result.Add(hit); collide = true; } } if (collide) { return(true); } } } return(false); }
public sealed override bool Overlaps(Shape shape, out CollisionResult result) { if (base.Overlaps(shape, out result)) { Manifold hit; if (Shape.Overlaps(shape, out hit)) { result.Add(hit); return(true); } } return(false); }
public bool Overlaps(Collider collider, T attributes, out CollisionResult result) { result = new CollisionResult(this); var canCollide = collider != null && collider != this && IsCollidable && collider.IsCollidable; if (canCollide) { if (collider is ShapeCollider) { var collide = false; var shape = (collider as ShapeCollider).Shape; var region = shape.Bounds .ToGrid(TileSize.ToVector2(), AbsolutePosition); foreach (var location in PlotRegion(region)) { Manifold hit = default; var tile = GetTileShape(location); var overlaps = tile?.Overlaps(shape, out hit) ?? false; if (overlaps && HasAttributes(location, attributes)) { hit.Normal = -hit.Normal; result.Add(hit); collide = true; } } if (collide) { return(true); } } } return(false); }
public sealed override bool Overlaps(Collider collider, out CollisionResult result) { if (base.Overlaps(collider, out result)) { if (collider is ShapeCollider) { Manifold hit; var shape = (collider as ShapeCollider).Shape; if (Shape.Overlaps(shape, out hit)) { result.Add(hit); return(true); } } else if (collider is TileMapCollider) { var tileMapCollider = collider as TileMapCollider; return(tileMapCollider.Overlaps(this, out result)); } } return(false); }