mirror of
https://github.com/dcronqvist/DotTiled.git
synced 2025-05-09 13:56:03 +03:00
Add Raylib example project and helper methods for resolving tilesets and finding source rectangles of tiles
This commit is contained in:
parent
84e75b93b7
commit
57e69f691e
8 changed files with 598 additions and 0 deletions
132
src/DotTiled.Tests/UnitTests/MapTests.cs
Normal file
132
src/DotTiled.Tests/UnitTests/MapTests.cs
Normal file
|
@ -0,0 +1,132 @@
|
|||
namespace DotTiled.Tests.UnitTests;
|
||||
|
||||
public class MapTests
|
||||
{
|
||||
[Fact]
|
||||
public void ResolveTilesetForGlobalTileID_NoTilesets_ThrowsException()
|
||||
{
|
||||
// Arrange
|
||||
var map = new Map
|
||||
{
|
||||
Version = "version",
|
||||
Orientation = MapOrientation.Orthogonal,
|
||||
Width = 10,
|
||||
Height = 10,
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
NextLayerID = 1,
|
||||
NextObjectID = 1
|
||||
};
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<ArgumentException>(() => map.ResolveTilesetForGlobalTileID(1, out var _));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ResolveTilesetForGlobalTileID_GlobalTileIDOutOfRange_ThrowsException()
|
||||
{
|
||||
// Arrange
|
||||
var map = new Map
|
||||
{
|
||||
Version = "version",
|
||||
Orientation = MapOrientation.Orthogonal,
|
||||
Width = 10,
|
||||
Height = 10,
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
NextLayerID = 1,
|
||||
NextObjectID = 1,
|
||||
Tilesets = [
|
||||
new Tileset
|
||||
{
|
||||
FirstGID = 1,
|
||||
Name = "Tileset1",
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
TileCount = 5,
|
||||
Columns = 5
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<ArgumentException>(() => map.ResolveTilesetForGlobalTileID(6, out var _));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ResolveTilesetForGlobalTileID_GlobalTileIDInRangeOfOnlyTileset_ReturnsTileset()
|
||||
{
|
||||
// Arrange
|
||||
var tileset = new Tileset
|
||||
{
|
||||
FirstGID = 1,
|
||||
Name = "Tileset1",
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
TileCount = 5,
|
||||
Columns = 5
|
||||
};
|
||||
var map = new Map
|
||||
{
|
||||
Version = "version",
|
||||
Orientation = MapOrientation.Orthogonal,
|
||||
Width = 10,
|
||||
Height = 10,
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
NextLayerID = 1,
|
||||
NextObjectID = 1,
|
||||
Tilesets = [tileset]
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = map.ResolveTilesetForGlobalTileID(3, out var localTileID);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(tileset, result);
|
||||
Assert.Equal(2, (int)localTileID); // 3 - 1 = 2 (local tile ID)
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ResolveTilesetForGlobalTileID_GlobalTileIDInRangeOfMultipleTilesets_ReturnsCorrectTileset()
|
||||
{
|
||||
// Arrange
|
||||
var tileset1 = new Tileset
|
||||
{
|
||||
FirstGID = 1,
|
||||
Name = "Tileset1",
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
TileCount = 5,
|
||||
Columns = 5
|
||||
};
|
||||
var tileset2 = new Tileset
|
||||
{
|
||||
FirstGID = 6,
|
||||
Name = "Tileset2",
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
TileCount = 5,
|
||||
Columns = 5
|
||||
};
|
||||
var map = new Map
|
||||
{
|
||||
Version = "version",
|
||||
Orientation = MapOrientation.Orthogonal,
|
||||
Width = 10,
|
||||
Height = 10,
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
NextLayerID = 1,
|
||||
NextObjectID = 1,
|
||||
Tilesets = [tileset1, tileset2]
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = map.ResolveTilesetForGlobalTileID(8, out var localTileID);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(tileset2, result);
|
||||
Assert.Equal(2, (int)localTileID); // 8 - 6 = 2 (local tile ID)
|
||||
}
|
||||
}
|
114
src/DotTiled.Tests/UnitTests/Tilesets/TilesetTests.cs
Normal file
114
src/DotTiled.Tests/UnitTests/Tilesets/TilesetTests.cs
Normal file
|
@ -0,0 +1,114 @@
|
|||
namespace DotTiled.Tests.UnitTests;
|
||||
|
||||
public class TilesetTests
|
||||
{
|
||||
[Fact]
|
||||
public void GetSourceRectangleForLocalTileID_TileIDOutOfRange_ThrowsException()
|
||||
{
|
||||
// Arrange
|
||||
var tileset = new Tileset
|
||||
{
|
||||
FirstGID = 0,
|
||||
Name = "Tileset1",
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
TileCount = 5,
|
||||
Columns = 5
|
||||
};
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<ArgumentException>(() => tileset.GetSourceRectangleForLocalTileID(6));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetSourceRectangleForLocalTileID_ValidTileIDIsInTilesList_ReturnsCorrectRectangle()
|
||||
{
|
||||
// Arrange
|
||||
var tileset = new Tileset
|
||||
{
|
||||
FirstGID = 0,
|
||||
Name = "Tileset1",
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
TileCount = 2,
|
||||
Columns = 2,
|
||||
Tiles = [
|
||||
new Tile
|
||||
{
|
||||
ID = 0,
|
||||
X = 0,
|
||||
Y = 0,
|
||||
Width = 16,
|
||||
Height = 16,
|
||||
},
|
||||
new Tile
|
||||
{
|
||||
ID = 1,
|
||||
X = 16,
|
||||
Y = 0,
|
||||
Width = 16,
|
||||
Height = 16,
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
// Act
|
||||
var rectangle = tileset.GetSourceRectangleForLocalTileID(1);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(16, rectangle.X);
|
||||
Assert.Equal(0, rectangle.Y);
|
||||
Assert.Equal(16, rectangle.Width);
|
||||
Assert.Equal(16, rectangle.Height);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetSourceRectangleForLocalTileID_ValidTileIDIsNotInTilesListNoMarginNoSpacing_ReturnsCorrectRectangle()
|
||||
{
|
||||
// Arrange
|
||||
var tileset = new Tileset
|
||||
{
|
||||
FirstGID = 0,
|
||||
Name = "Tileset1",
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
TileCount = 5,
|
||||
Columns = 5,
|
||||
};
|
||||
|
||||
// Act
|
||||
var rectangle = tileset.GetSourceRectangleForLocalTileID(3);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(48, rectangle.X);
|
||||
Assert.Equal(0, rectangle.Y);
|
||||
Assert.Equal(16, rectangle.Width);
|
||||
Assert.Equal(16, rectangle.Height);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetSourceRectangleForLocalTileID_ValidTileIDIsNotInTilesListWithMarginAndSpacing_ReturnsCorrectRectangle()
|
||||
{
|
||||
// Arrange
|
||||
var tileset = new Tileset
|
||||
{
|
||||
FirstGID = 0,
|
||||
Name = "Tileset1",
|
||||
TileWidth = 16,
|
||||
TileHeight = 16,
|
||||
TileCount = 5,
|
||||
Columns = 5,
|
||||
Margin = 3,
|
||||
Spacing = 1
|
||||
};
|
||||
|
||||
// Act
|
||||
var rectangle = tileset.GetSourceRectangleForLocalTileID(3);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(54, rectangle.X);
|
||||
Assert.Equal(3, rectangle.Y);
|
||||
Assert.Equal(16, rectangle.Width);
|
||||
Assert.Equal(16, rectangle.Height);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue