diff options
Diffstat (limited to 'Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled')
12 files changed, 838 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/MonoGame.Extended.Content.Pipeline.Tests.Tiled.csproj b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/MonoGame.Extended.Content.Pipeline.Tests.Tiled.csproj new file mode 100644 index 0000000..9c8f57c --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/MonoGame.Extended.Content.Pipeline.Tests.Tiled.csproj @@ -0,0 +1,24 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <ItemGroup> + <PackageReference Include="MonoGame.Framework.Content.Pipeline" Version="3.8.1.303" /> + </ItemGroup> + + <ItemGroup> + <ProjectReference Include="..\..\source\MonoGame.Extended.Content.Pipeline\MonoGame.Extended.Content.Pipeline.csproj" /> + </ItemGroup> + + <ItemGroup> + <Content Include="TestData\isometric.tmx" CopyToOutputDirectory="PreserveNewest" /> + <Content Include="TestData\isometric_tileset.png" CopyToOutputDirectory="PreserveNewest" /> + <Content Include="TestData\level01.tmx" CopyToOutputDirectory="PreserveNewest" /> + <Content Include="TestData\template.tx" CopyToOutputDirectory="PreserveNewest" /> + <Content Include="TestData\test-object-layer.tmx" CopyToOutputDirectory="PreserveNewest" /> + <Content Include="TestData\test-tileset-base64.tmx" CopyToOutputDirectory="PreserveNewest" /> + <Content Include="TestData\test-tileset-csv.tmx" CopyToOutputDirectory="PreserveNewest" /> + <Content Include="TestData\test-tileset-gzip.tmx" CopyToOutputDirectory="PreserveNewest" /> + <Content Include="TestData\test-tileset-xml.tmx" CopyToOutputDirectory="PreserveNewest" /> + <Content Include="TestData\test-tileset-zlib.tmx" CopyToOutputDirectory="PreserveNewest" /> + </ItemGroup> + +</Project> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/isometric.tmx b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/isometric.tmx new file mode 100644 index 0000000..3f3168c --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/isometric.tmx @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE map SYSTEM "http://mapeditor.org/dtd/1.0/map.dtd"> +<map version="1.0" orientation="isometric" width="40" height="40" tilewidth="64" tileheight="32"> + <tileset firstgid="1" name="Isometric Tileset" tilewidth="64" tileheight="128"> + <image source="isometric_tileset.png" width="128" height="128"/> + <tile id="0"> + <properties> + <property name="obstacle" value="1"/> + </properties> + </tile> + </tileset> + <layer name="Ground" width="40" height="40"> + <data encoding="csv"> +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,1,1,1,2,1,1,2,1,0,0,0,0,0,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,1,2,2,2,2,1,1,0,0,2,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,1,2,2,2,2,2,2,1,0,0,0,0,0,2,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,1,1,2,2,2,2,2,1,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,1,1,1,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,1,0,0,1,1,1,2,2,2,0,0,0,0,0,2,0,0,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,1,0,0,2,1,2,2,2,2,2,0,0,0,0,0,0,0,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,1,0,2,2,1,1,0,2,2,0,0,0,0,0,0,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,1,1,2,2,2,1,1,0,2,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,1,2,2,2,2,2,1,2,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,2,2,2,1,2,1,2,2,2,1,1,2,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,1,1,2,2,1,1,1,2,2,2,1,1,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,1,1,0,1,0,1,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,1,1,1,0,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,1,1,1,2,1,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +0,0,0,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,0,0,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,0,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 +</data> + </layer> + <objectgroup color="#ffaa00" name="Objects" width="40" height="40"> + <object x="1261" y="428" width="141" height="74"/> + <object type="npc" x="498" y="35" width="156" height="42"/> + <object x="576" y="224" width="448" height="128"/> + <object x="2183" y="747" width="228" height="96"/> + <object name="fddsadsa" type="warp" x="960" y="416" width="192" height="96"/> + <object x="1100" y="556" width="138" height="23"/> + <object x="218" y="217"> + <polyline points="0,0 14,-90 36,3"/> + </object> + <object x="243" y="174"> + <polyline points="0,0 -17,0"/> + </object> + <object x="302" y="219"> + <polyline points="0,0 -2,-91 -36,-94 28,-91"/> + </object> + <object x="357" y="125"> + <polyline points="0,0 7,96 41,98"/> + </object> + </objectgroup> +</map> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/isometric_tileset.png b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/isometric_tileset.png Binary files differnew file mode 100644 index 0000000..4c6f1b4 --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/isometric_tileset.png diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/level01.tmx b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/level01.tmx new file mode 100644 index 0000000..39eb900 --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/level01.tmx @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.0" orientation="orthogonal" renderorder="right-down" width="20" height="10" tilewidth="128" tileheight="128" backgroundcolor="#7d7d7d" nextobjectid="1"> + <properties> + <property name="awesome" value="42"/> + </properties> + <tileset firstgid="1" name="free-tileset" tilewidth="128" tileheight="128" tilecount="30" spacing="2" margin="2"> + <image source="free-tileset.png" width="652" height="783"/> + <tile id="7"> + <properties> + <property name="frog" value="dog"/> + </properties> + </tile> + <tile id="23"> + <properties> + <property name="element" value="box"/> + </properties> + </tile> + <tile id="24"> + <properties> + <property name="hp" value="55"/> + <property name="mp" value="16"/> + </properties> + </tile> + </tileset> + <layer name="Tile Layer 2" width="20" height="10"> + <data> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="26"/> + <tile gid="21"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="25"/> + <tile gid="29"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="21"/> + <tile gid="20"/> + <tile gid="27"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="20"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="21"/> + <tile gid="28"/> + <tile gid="25"/> + <tile gid="30"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="29"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="18"/> + <tile gid="18"/> + <tile gid="18"/> + <tile gid="18"/> + <tile gid="18"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="19"/> + <tile gid="19"/> + <tile gid="19"/> + <tile gid="19"/> + <tile gid="19"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="19"/> + <tile gid="19"/> + <tile gid="19"/> + <tile gid="19"/> + <tile gid="19"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + </data> + </layer> + <imagelayer name="Image Layer 1" x="100" y="100"> + <image source="hills.png"/> + </imagelayer> + <layer name="Tile Layer 1" width="20" height="10"> + <properties> + <property name="customlayerprop" value="1"/> + <property name="customlayerprop2" value="2"/> + </properties> + <data> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="14"/> + <tile gid="15"/> + <tile gid="15"/> + <tile gid="16"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="14"/> + <tile gid="15"/> + <tile gid="16"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="24"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="1"/> + <tile gid="2"/> + <tile gid="2"/> + <tile gid="3"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="1"/> + <tile gid="2"/> + <tile gid="2"/> + <tile gid="2"/> + <tile gid="2"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="4"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="7"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="4"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="2"/> + <tile gid="2"/> + <tile gid="2"/> + <tile gid="2"/> + <tile gid="8"/> + <tile gid="9"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="7"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="1"/> + <tile gid="2"/> + <tile gid="8"/> + <tile gid="9"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="7"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="4"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="7"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="0"/> + <tile gid="4"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + <tile gid="6"/> + </data> + </layer> +</map> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/template.tx b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/template.tx new file mode 100644 index 0000000..1f00d19 --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/template.tx @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<template> + <object width="30.9247" height="20.7597"/> +</template> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-object-layer.tmx b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-object-layer.tmx new file mode 100644 index 0000000..dcdbee9 --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-object-layer.tmx @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.0" orientation="orthogonal" renderorder="right-down" width="25" height="15" tilewidth="64" tileheight="64" nextobjectid="12"> + <objectgroup name="Object Layer 1"> + <object id="1" x="131.345" y="65.234" width="311.111" height="311.232"> + <properties> + <property name="shape" value="circle"/> + </properties> + <ellipse/> + </object> + <object id="7" class="sprite" x="240" y="440" width="322" height="186" visible="0"/> + <object id="8" type="rectangle" x="506" y="142" width="136" height="234"> + <properties> + <property name="area" value="player-spawn"/> + </properties> + </object> + <object id="9" name="polygon" x="621" y="450"> + <polygon points="0,0 180,90 -8,275 -45,81 38,77"/> + </object> + <object id="11" x="43" y="350"> + <polyline points="0,0 28,299 326,413 461,308"/> + </object> + <object id="12" gid="23" x="169.333" y="490.909" width="345.818" height="364"/> + </objectgroup> +</map> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-base64.tmx b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-base64.tmx new file mode 100644 index 0000000..09177cb --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-base64.tmx @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.0" orientation="orthogonal" renderorder="left-down" width="3" height="3" tilewidth="32" tileheight="32" nextobjectid="1"> + <tileset firstgid="1" name="test-tileset" tilewidth="32" tileheight="32" spacing="2" margin="2"> + <image source="test-tileset.png" width="104" height="104"/> + </tileset> + <layer name="Tile Layer 1" width="3" height="3"> + <data encoding="base64"> + AQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAA + </data> + </layer> +</map> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-csv.tmx b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-csv.tmx new file mode 100644 index 0000000..b709f2b --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-csv.tmx @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.0" orientation="orthogonal" renderorder="left-down" width="3" height="3" tilewidth="32" tileheight="32" nextobjectid="1"> + <tileset firstgid="1" name="test-tileset" tilewidth="32" tileheight="32" spacing="2" margin="2"> + <image source="test-tileset.png" width="104" height="104"/> + </tileset> + <layer name="Tile Layer 1" width="3" height="3"> + <data encoding="csv"> +1,2,3, +4,5,6, +7,8,9 +</data> + </layer> +</map> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-gzip.tmx b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-gzip.tmx new file mode 100644 index 0000000..c48705f --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-gzip.tmx @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.0" orientation="orthogonal" renderorder="left-down" width="3" height="3" tilewidth="32" tileheight="32" nextobjectid="1"> + <tileset firstgid="1" name="test-tileset" tilewidth="32" tileheight="32" spacing="2" margin="2"> + <image source="test-tileset.png" width="104" height="104"/> + </tileset> + <layer name="Tile Layer 1" width="3" height="3"> + <data encoding="base64" compression="gzip"> + H4sIAAAAAAAACw3Dhw0AAAjDsLLh/4eJJZskZzBZbA6Xxwdm9rUOJAAAAA== + </data> + </layer> +</map> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-xml.tmx b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-xml.tmx new file mode 100644 index 0000000..0f1a741 --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-xml.tmx @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.0" orientation="orthogonal" renderorder="left-down" width="3" height="3" tilewidth="32" tileheight="32" nextobjectid="1"> + <tileset firstgid="1" name="test-tileset" tilewidth="32" tileheight="32" spacing="2" margin="2"> + <image source="test-tileset.png" width="104" height="104"/> + </tileset> + <layer name="Tile Layer 1" width="3" height="3"> + <data> + <tile gid="1"/> + <tile gid="2"/> + <tile gid="3"/> + <tile gid="4"/> + <tile gid="5"/> + <tile gid="6"/> + <tile gid="7"/> + <tile gid="8"/> + <tile gid="9"/> + </data> + </layer> +</map> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-zlib.tmx b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-zlib.tmx new file mode 100644 index 0000000..7a5a548 --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TestData/test-tileset-zlib.tmx @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.0" orientation="orthogonal" renderorder="left-down" width="3" height="3" tilewidth="32" tileheight="32" nextobjectid="1"> + <tileset firstgid="1" name="test-tileset" tilewidth="32" tileheight="32" spacing="2" margin="2"> + <image source="test-tileset.png" width="104" height="104"/> + </tileset> + <layer name="Tile Layer 1" width="3" height="3"> + <data encoding="base64" compression="zlib"> + eJwNw4cNAAAIw7Cy4f+HiSWbJGcwWWwOl8cHArgALg== + </data> + </layer> +</map> diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TiledMapImporterProcessorTests.cs b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TiledMapImporterProcessorTests.cs new file mode 100644 index 0000000..352457a --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Content.Pipeline.Tests.Tiled/TiledMapImporterProcessorTests.cs @@ -0,0 +1,205 @@ +using System.IO; +using System.Linq; +using Microsoft.Xna.Framework.Content.Pipeline; +using MonoGame.Extended.Content.Pipeline.Tiled; +using MonoGame.Extended.Tiled.Serialization; +using NSubstitute; +using Xunit; + +namespace MonoGame.Extended.Content.Pipeline.Tests.Tiled +{ + + public class TiledMapImporterProcessorTests + { + [Fact] + public void TiledMapImporter_Import_Test() + { + var filePath = PathExtensions.GetApplicationFullPath("TestData", "level01.tmx"); + + var logger = Substitute.For<ContentBuildLogger>(); + var importer = new TiledMapImporter(); + var importerContext = Substitute.For<ContentImporterContext>(); + importerContext.Logger.Returns(logger); + + var contentItem = importer.Import(filePath, importerContext); + var map = contentItem.Data; + + Assert.Equal("1.0", map.Version); + Assert.Equal(TiledMapOrientationContent.Orthogonal, map.Orientation); + Assert.Equal(TiledMapTileDrawOrderContent.RightDown, map.RenderOrder); + Assert.Equal(20, map.Width); + Assert.Equal(10, map.Height); + Assert.Equal(128, map.TileWidth); + Assert.Equal(128, map.TileHeight); + Assert.Equal("#7d7d7d", map.BackgroundColor); + Assert.Equal("awesome", map.Properties[0].Name); + Assert.Equal("42", map.Properties[0].Value); + Assert.Single(map.Tilesets); + Assert.Equal(3, map.Layers.Count); + Assert.Equal(TiledMapOrientationContent.Orthogonal, map.Orientation); + + var tileset = map.Tilesets.First(); + Assert.Equal(1, tileset.FirstGlobalIdentifier); + Assert.Equal("free-tileset.png", Path.GetFileName(tileset.Image.Source)); + Assert.Equal(652, tileset.Image.Width); + Assert.Equal(783, tileset.Image.Height); + Assert.Equal(2, tileset.Margin); + Assert.Equal(30, tileset.TileCount); + Assert.Equal("free-tileset", tileset.Name); + Assert.Null(tileset.Source); + Assert.Equal(2, tileset.Spacing); + //Assert.Equal(0, tileset.TerrainTypes.Count); + Assert.Empty(tileset.Properties); + Assert.Equal(128, tileset.TileHeight); + Assert.Equal(128, tileset.TileWidth); + Assert.Equal(0, tileset.TileOffset.X); + Assert.Equal(0, tileset.TileOffset.Y); + + var tileLayer2 = (TiledMapTileLayerContent)map.Layers[0]; + Assert.Equal("Tile Layer 2", tileLayer2.Name); + Assert.Equal(1, tileLayer2.Opacity); + Assert.Empty(tileLayer2.Properties); + Assert.True(tileLayer2.Visible); + Assert.Equal(200, tileLayer2.Data.Tiles.Count); + Assert.Equal(0, tileLayer2.X); + Assert.Equal(0, tileLayer2.Y); + + var imageLayer = (TiledMapImageLayerContent)map.Layers[1]; + Assert.Equal("Image Layer 1", imageLayer.Name); + Assert.Equal(1, imageLayer.Opacity); + Assert.Empty(imageLayer.Properties); + Assert.True(imageLayer.Visible); + Assert.Equal("hills.png", Path.GetFileName(imageLayer.Image.Source)); + Assert.Equal(100, imageLayer.X); + Assert.Equal(100, imageLayer.Y); + + var tileLayer1 = (TiledMapTileLayerContent)map.Layers[2]; + Assert.Equal("Tile Layer 1", tileLayer1.Name); + Assert.Equal(2, tileLayer1.Properties.Count); + + Assert.Equal("customlayerprop", tileLayer1.Properties[0].Name); + Assert.Equal("1", tileLayer1.Properties[0].Value); + + Assert.Equal("customlayerprop2", tileLayer1.Properties[1].Name); + Assert.Equal("2", tileLayer1.Properties[1].Value); + } + + [Fact] + public void TiledMapImporter_Xml_Test() + { + var filePath = PathExtensions.GetApplicationFullPath("TestData", "test-tileset-xml.tmx"); + var map = ImportAndProcessMap(filePath); + var layer = map.Layers.OfType<TiledMapTileLayerContent>().First(); + var actualData = layer.Data.Tiles.Select(i => i.GlobalIdentifier).ToArray(); + + Assert.Null(layer.Data.Encoding); + Assert.Null(layer.Data.Compression); + Assert.True(new uint[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }.SequenceEqual(actualData)); + } + + [Fact] + public void TiledMapImporter_Csv_Test() + { + var filePath = PathExtensions.GetApplicationFullPath("TestData", "test-tileset-csv.tmx"); + var map = ImportAndProcessMap(filePath); + var layer = map.Layers.OfType<TiledMapTileLayerContent>().First(); + var data = layer.Data.Tiles.Select(i => i.GlobalIdentifier).ToArray(); + + Assert.Equal("csv", layer.Data.Encoding); + Assert.Null(layer.Data.Compression); + //Assert.True(new uint[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }.SequenceEqual(data)); + } + + [Fact] + public void TiledMapImporter_Base64_Test() + { + var filePath = PathExtensions.GetApplicationFullPath("TestData", "test-tileset-base64.tmx"); + var map = ImportAndProcessMap(filePath); + var layer = map.Layers.OfType<TiledMapTileLayerContent>().First(); + var data = layer.Data.Tiles.Select(i => i.GlobalIdentifier).ToArray(); + + Assert.Equal("base64", layer.Data.Encoding); + Assert.Null(layer.Data.Compression); + //Assert.True(new uint[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }.SequenceEqual(data)); + } + + [Fact] + public void TiledMapImporter_Gzip_Test() + { + var filePath = PathExtensions.GetApplicationFullPath("TestData", "test-tileset-gzip.tmx"); + var map = ImportAndProcessMap(filePath); + var layer = map.Layers.OfType<TiledMapTileLayerContent>().First(); + var data = layer.Data.Tiles.Select(i => i.GlobalIdentifier).ToArray(); + + Assert.Equal("base64", layer.Data.Encoding); + Assert.Equal("gzip", layer.Data.Compression); + //Assert.True(new uint[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }.SequenceEqual(data)); + } + + + [Fact] + public void TiledMapImporter_Zlib_Test() + { + var filePath = PathExtensions.GetApplicationFullPath("TestData", "test-tileset-zlib.tmx"); + var map = ImportAndProcessMap(filePath); + var layer = map.Layers.OfType<TiledMapTileLayerContent>().First(); + var data = layer.Data.Tiles.Select(i => i.GlobalIdentifier).ToArray(); + + Assert.Equal("base64", layer.Data.Encoding); + Assert.Equal("zlib", layer.Data.Compression); + //Assert.True(new uint[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }.SequenceEqual(data)); + } + + [Fact] + public void TiledMapImporter_ObjectLayer_Test() + { + var filePath = PathExtensions.GetApplicationFullPath("TestData", "test-object-layer.tmx"); + var map = ImportAndProcessMap(filePath); + + Assert.Single(map.Layers); + Assert.IsType<TiledMapObjectLayerContent>(map.Layers[0]); + var tmxObjectGroup = map.Layers[0] as TiledMapObjectLayerContent; + var tmxObject = tmxObjectGroup.Objects[0]; + var tmxPolygon = tmxObjectGroup.Objects[3].Polygon; + var tmxPolyline = tmxObjectGroup.Objects[4].Polyline; + + Assert.Equal("Object Layer 1", tmxObjectGroup.Name); + Assert.Equal(1, tmxObject.Identifier); + Assert.Equal(131.345f, tmxObject.X); + Assert.Equal(65.234f, tmxObject.Y); + Assert.Equal(311.111f, tmxObject.Width); + Assert.Equal(311.232f, tmxObject.Height); + Assert.Single(tmxObject.Properties); + Assert.Equal("shape", tmxObject.Properties[0].Name); + Assert.Equal("circle", tmxObject.Properties[0].Value); + Assert.NotNull(tmxObject.Ellipse); + Assert.False(tmxObjectGroup.Objects[1].Visible); + Assert.Equal((uint)0, tmxObjectGroup.Objects[1].GlobalIdentifier); + Assert.Equal((uint)23, tmxObjectGroup.Objects[5].GlobalIdentifier); + Assert.Equal("rectangle", tmxObjectGroup.Objects[2].Type); + Assert.Equal("sprite", tmxObjectGroup.Objects[1].Class); + Assert.NotNull(tmxPolygon); + Assert.Equal("0,0 180,90 -8,275 -45,81 38,77", tmxPolygon.Points); + Assert.NotNull(tmxPolyline); + Assert.Equal("0,0 28,299 326,413 461,308", tmxPolyline.Points); + } + + + private static TiledMapContent ImportAndProcessMap(string filename) + { + var logger = Substitute.For<ContentBuildLogger>(); + var importer = new TiledMapImporter(); + var importerContext = Substitute.For<ContentImporterContext>(); + importerContext.Logger.Returns(logger); + + var processor = new TiledMapProcessor(); + var processorContext = Substitute.For<ContentProcessorContext>(); + processorContext.Logger.Returns(logger); + + var import = importer.Import(filename, importerContext); + var result = processor.Process(import, processorContext); + + return result.Data; + } + } +} |