mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 20:58:34 +01:00
allowed the GetArea extension to calculate flipping
This commit is contained in:
parent
45fc12b0cb
commit
0ddb4afc3f
2 changed files with 13 additions and 12 deletions
|
@ -5,6 +5,7 @@ using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using MonoGame.Extended;
|
using MonoGame.Extended;
|
||||||
using MonoGame.Extended.Tiled;
|
using MonoGame.Extended.Tiled;
|
||||||
|
using static MonoGame.Extended.Tiled.TiledMapTileFlipFlags;
|
||||||
using ColorHelper = MLEM.Extensions.ColorHelper;
|
using ColorHelper = MLEM.Extensions.ColorHelper;
|
||||||
|
|
||||||
namespace MLEM.Extended.Tiled {
|
namespace MLEM.Extended.Tiled {
|
||||||
|
@ -268,11 +269,18 @@ namespace MLEM.Extended.Tiled {
|
||||||
/// <param name="obj">The object whose area to get</param>
|
/// <param name="obj">The object whose area to get</param>
|
||||||
/// <param name="map">The map</param>
|
/// <param name="map">The map</param>
|
||||||
/// <param name="position">The position to add to the object's position</param>
|
/// <param name="position">The position to add to the object's position</param>
|
||||||
|
/// <param name="flipFlags">The flipping of the tile that this object belongs to. If set, the returned area will be "flipped" in the tile's space so that it matches the flip flags.</param>
|
||||||
/// <returns>The area that the tile covers</returns>
|
/// <returns>The area that the tile covers</returns>
|
||||||
public static RectangleF GetArea(this TiledMapObject obj, TiledMap map, Vector2? position = null) {
|
public static RectangleF GetArea(this TiledMapObject obj, TiledMap map, Vector2? position = null, TiledMapTileFlipFlags flipFlags = None) {
|
||||||
var tileSize = map.GetTileSize();
|
var tileSize = map.GetTileSize();
|
||||||
var pos = position ?? Vector2.Zero;
|
var area = new RectangleF(obj.Position / tileSize, obj.Size / tileSize);
|
||||||
return new RectangleF(obj.Position / tileSize + pos, obj.Size / tileSize);
|
if (flipFlags.HasFlag(FlipHorizontally))
|
||||||
|
area.X = 1 - area.X - area.Width;
|
||||||
|
if (flipFlags.HasFlag(FlipVertically))
|
||||||
|
area.Y = 1 - area.Y - area.Height;
|
||||||
|
if (position != null)
|
||||||
|
area.Offset(position.Value);
|
||||||
|
return area;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -141,15 +141,8 @@ namespace MLEM.Extended.Tiled {
|
||||||
/// <param name="collisions">The list of collisions to add to</param>
|
/// <param name="collisions">The list of collisions to add to</param>
|
||||||
/// <param name="tile">The tile's collision information</param>
|
/// <param name="tile">The tile's collision information</param>
|
||||||
public static void DefaultCollectCollisions(List<RectangleF> collisions, TileCollisionInfo tile) {
|
public static void DefaultCollectCollisions(List<RectangleF> collisions, TileCollisionInfo tile) {
|
||||||
foreach (var obj in tile.TilesetTile.Objects) {
|
foreach (var obj in tile.TilesetTile.Objects)
|
||||||
var area = obj.GetArea(tile.Map);
|
collisions.Add(obj.GetArea(tile.Map, tile.Position, tile.Tile.Flags));
|
||||||
if (tile.Tile.IsFlippedHorizontally)
|
|
||||||
area.X = 1 - area.X - area.Width;
|
|
||||||
if (tile.Tile.IsFlippedVertically)
|
|
||||||
area.Y = 1 - area.Y - area.Height;
|
|
||||||
area.Offset(tile.Position);
|
|
||||||
collisions.Add(area);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in a new issue