mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 20:58:34 +01:00
expose GetCollidingAreas
This commit is contained in:
parent
200058a611
commit
dc514815c3
1 changed files with 19 additions and 11 deletions
|
@ -112,30 +112,38 @@ namespace MLEM.Extended.Tiled {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a set of normals and penetration amounts for each <see cref="TileCollisionInfo"/> that intersects with the given <see cref="RectangleF"/> area.
|
/// Returns an enumerable of all of the <see cref="TileCollisionInfo.Collisions"/> of the colliding tiles in the given area.
|
||||||
|
/// This method is a convenience method based on <see cref="GetCollidingTiles"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="area">The area to check for collisions in</param>
|
||||||
|
/// <param name="included">A function that determines if a certain info should be included or not</param>
|
||||||
|
/// <returns>An enumerable of collision rectangles for that area</returns>
|
||||||
|
public IEnumerable<RectangleF> GetCollidingAreas(RectangleF area, Func<TileCollisionInfo, bool> included = null) {
|
||||||
|
foreach (var tile in this.GetCollidingTiles(area, included)) {
|
||||||
|
foreach (var col in tile.Collisions)
|
||||||
|
yield return col;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns an enumerable of normals and penetration amounts for each <see cref="TileCollisionInfo"/> that intersects with the given <see cref="RectangleF"/> area.
|
||||||
/// The normals and penetration amounts are based on <see cref="MLEM.Extensions.NumberExtensions.Penetrate"/>.
|
/// The normals and penetration amounts are based on <see cref="MLEM.Extensions.NumberExtensions.Penetrate"/>.
|
||||||
/// Note that all x penetrations are returned before all y penetrations, which improves collision detection in sidescrolling games with gravity.
|
/// Note that all x penetrations are returned before all y penetrations, which improves collision detection in sidescrolling games with gravity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="getArea">The area to penetrate</param>
|
/// <param name="getArea">The area to penetrate</param>
|
||||||
|
/// <param name="included">A function that determines if a certain info should be included or not</param>
|
||||||
/// <returns>A set of normals and penetration amounts</returns>
|
/// <returns>A set of normals and penetration amounts</returns>
|
||||||
public IEnumerable<(Vector2, float)> GetPenetrations(Func<RectangleF> getArea) {
|
public IEnumerable<(Vector2, float)> GetPenetrations(Func<RectangleF> getArea, Func<TileCollisionInfo, bool> included = null) {
|
||||||
foreach (var col in this.GetCollidingAreas(getArea())) {
|
foreach (var col in this.GetCollidingAreas(getArea(), included)) {
|
||||||
if (getArea().Penetrate(col, out var normal, out var penetration) && normal.X != 0)
|
if (getArea().Penetrate(col, out var normal, out var penetration) && normal.X != 0)
|
||||||
yield return (normal, penetration);
|
yield return (normal, penetration);
|
||||||
}
|
}
|
||||||
foreach (var col in this.GetCollidingAreas(getArea())) {
|
foreach (var col in this.GetCollidingAreas(getArea(), included)) {
|
||||||
if (getArea().Penetrate(col, out var normal, out var penetration) && normal.Y != 0)
|
if (getArea().Penetrate(col, out var normal, out var penetration) && normal.Y != 0)
|
||||||
yield return (normal, penetration);
|
yield return (normal, penetration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<RectangleF> GetCollidingAreas(RectangleF area, Func<TileCollisionInfo, bool> included = null) {
|
|
||||||
foreach (var tile in this.GetCollidingTiles(area, included)) {
|
|
||||||
foreach (var col in tile.Collisions)
|
|
||||||
yield return col;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A delegate method used to override the default collision checking behavior.
|
/// A delegate method used to override the default collision checking behavior.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in a new issue