From 2d478b5313ac61dbff66e9d025986dc6d5c0b5aa Mon Sep 17 00:00:00 2001 From: Dylan Wilson Date: Fri, 7 Aug 2015 17:43:23 +1000 Subject: [PATCH] almost finished render order for tiled maps --- .../Tiled/TiledMapWriter.cs | 19 ++++++++++++++++++ .../MonoGame.Extended.csproj | 1 + Source/MonoGame.Extended/Tiled/TiledLayer.cs | 4 ++-- Source/MonoGame.Extended/Tiled/TiledMap.cs | 1 + .../MonoGame.Extended/Tiled/TiledMapReader.cs | 5 ++++- .../Tiled/TiledMapRenderOrder.cs | 10 ++++++++++ Source/Sandbox/Content/Content.mgcb | 20 +++++++++++++++++++ .../Content/test-tileset-left-down.tmx | 19 ++++++++++++++++++ .../Sandbox/Content/test-tileset-left-up.tmx | 19 ++++++++++++++++++ .../Content/test-tileset-right-down.tmx | 19 ++++++++++++++++++ .../Sandbox/Content/test-tileset-right-up.tmx | 19 ++++++++++++++++++ Source/Sandbox/SandboxGame.cs | 6 +++--- 12 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 Source/MonoGame.Extended/Tiled/TiledMapRenderOrder.cs create mode 100644 Source/Sandbox/Content/test-tileset-left-down.tmx create mode 100644 Source/Sandbox/Content/test-tileset-left-up.tmx create mode 100644 Source/Sandbox/Content/test-tileset-right-down.tmx create mode 100644 Source/Sandbox/Content/test-tileset-right-up.tmx diff --git a/Source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapWriter.cs b/Source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapWriter.cs index e3bac9a3..c07ce780 100644 --- a/Source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapWriter.cs +++ b/Source/MonoGame.Extended.Content.Pipeline/Tiled/TiledMapWriter.cs @@ -3,6 +3,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; using MonoGame.Extended.Tiled; +using TiledSharp; namespace MonoGame.Extended.Content.Pipeline.Tiled { @@ -13,6 +14,7 @@ namespace MonoGame.Extended.Content.Pipeline.Tiled { var map = value.Map; output.Write(new Color(map.BackgroundColor.R, map.BackgroundColor.G, map.BackgroundColor.B)); + output.Write(ConvertRenderOrder(map.RenderOrder).ToString()); output.Write(map.Width); output.Write(map.Height); output.Write(map.TileWidth); @@ -55,5 +57,22 @@ namespace MonoGame.Extended.Content.Pipeline.Tiled { return typeof (TiledMapReader).AssemblyQualifiedName; } + + private static TiledMapRenderOrder ConvertRenderOrder(TmxMap.RenderOrderType renderOrder) + { + switch (renderOrder) + { + case TmxMap.RenderOrderType.RightDown: + return TiledMapRenderOrder.RightDown; + case TmxMap.RenderOrderType.RightUp: + return TiledMapRenderOrder.RightUp; + case TmxMap.RenderOrderType.LeftDown: + return TiledMapRenderOrder.LeftDown; + case TmxMap.RenderOrderType.LeftUp: + return TiledMapRenderOrder.LeftUp; + default: + return TiledMapRenderOrder.RightDown; + } + } } } \ No newline at end of file diff --git a/Source/MonoGame.Extended/MonoGame.Extended.csproj b/Source/MonoGame.Extended/MonoGame.Extended.csproj index b71b8748..2479522c 100644 --- a/Source/MonoGame.Extended/MonoGame.Extended.csproj +++ b/Source/MonoGame.Extended/MonoGame.Extended.csproj @@ -53,6 +53,7 @@ + diff --git a/Source/MonoGame.Extended/Tiled/TiledLayer.cs b/Source/MonoGame.Extended/Tiled/TiledLayer.cs index b3ab8e27..b02c22d2 100644 --- a/Source/MonoGame.Extended/Tiled/TiledLayer.cs +++ b/Source/MonoGame.Extended/Tiled/TiledLayer.cs @@ -40,8 +40,8 @@ namespace MonoGame.Extended.Tiled if (region != null) { // not exactly sure why we need to compensate 1 pixel here. Could be a bug in MonoGame? - var tx = x * (region.Width - 1); - var ty = y * (region.Height - 1); + var tx = x * (_tiledMap.TileWidth - 1); + var ty = y * (_tiledMap.TileHeight - 1); _spriteBatch.Draw(region, new Rectangle(tx, ty, region.Width, region.Height), Color.White); } diff --git a/Source/MonoGame.Extended/Tiled/TiledMap.cs b/Source/MonoGame.Extended/Tiled/TiledMap.cs index 5fad1d3e..d801e74a 100644 --- a/Source/MonoGame.Extended/Tiled/TiledMap.cs +++ b/Source/MonoGame.Extended/Tiled/TiledMap.cs @@ -30,6 +30,7 @@ namespace MonoGame.Extended.Tiled public int TileWidth { get; private set; } public int TileHeight { get; private set; } public Color? BackgroundColor { get; set; } + public TiledMapRenderOrder RenderOrder { get; set; } public int WidthInPixels { diff --git a/Source/MonoGame.Extended/Tiled/TiledMapReader.cs b/Source/MonoGame.Extended/Tiled/TiledMapReader.cs index aa38b984..caa117bf 100644 --- a/Source/MonoGame.Extended/Tiled/TiledMapReader.cs +++ b/Source/MonoGame.Extended/Tiled/TiledMapReader.cs @@ -1,3 +1,4 @@ +using System; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using MonoGame.Extended.Content; @@ -9,6 +10,7 @@ namespace MonoGame.Extended.Tiled protected override TiledMap Read(ContentReader input, TiledMap existingInstance) { var backgroundColor = input.ReadColor(); + var renderOrder = (TiledMapRenderOrder) Enum.Parse(typeof (TiledMapRenderOrder), input.ReadString(), true); var tileMap = new TiledMap( graphicsDevice: input.ContentManager.GetGraphicsDevice(), width: input.ReadInt32(), @@ -16,7 +18,8 @@ namespace MonoGame.Extended.Tiled tileWidth: input.ReadInt32(), tileHeight: input.ReadInt32()) { - BackgroundColor = backgroundColor + BackgroundColor = backgroundColor, + RenderOrder = renderOrder }; var tileSetCount = input.ReadInt32(); diff --git a/Source/MonoGame.Extended/Tiled/TiledMapRenderOrder.cs b/Source/MonoGame.Extended/Tiled/TiledMapRenderOrder.cs new file mode 100644 index 00000000..d9ef1356 --- /dev/null +++ b/Source/MonoGame.Extended/Tiled/TiledMapRenderOrder.cs @@ -0,0 +1,10 @@ +namespace MonoGame.Extended.Tiled +{ + public enum TiledMapRenderOrder + { + RightDown, + RightUp, + LeftDown, + LeftUp + } +} \ No newline at end of file diff --git a/Source/Sandbox/Content/Content.mgcb b/Source/Sandbox/Content/Content.mgcb index 7bc8baba..046bc42f 100644 --- a/Source/Sandbox/Content/Content.mgcb +++ b/Source/Sandbox/Content/Content.mgcb @@ -87,3 +87,23 @@ /processor:TiledMapProcessor /build:test-tileset-map1.tmx +#begin test-tileset-left-down.tmx +/importer:TiledMapImporter +/processor:TiledMapProcessor +/build:test-tileset-left-down.tmx + +#begin test-tileset-left-up.tmx +/importer:TiledMapImporter +/processor:TiledMapProcessor +/build:test-tileset-left-up.tmx + +#begin test-tileset-right-down.tmx +/importer:TiledMapImporter +/processor:TiledMapProcessor +/build:test-tileset-right-down.tmx + +#begin test-tileset-right-up.tmx +/importer:TiledMapImporter +/processor:TiledMapProcessor +/build:test-tileset-right-up.tmx + diff --git a/Source/Sandbox/Content/test-tileset-left-down.tmx b/Source/Sandbox/Content/test-tileset-left-down.tmx new file mode 100644 index 00000000..429929fd --- /dev/null +++ b/Source/Sandbox/Content/test-tileset-left-down.tmx @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Source/Sandbox/Content/test-tileset-left-up.tmx b/Source/Sandbox/Content/test-tileset-left-up.tmx new file mode 100644 index 00000000..4da6b029 --- /dev/null +++ b/Source/Sandbox/Content/test-tileset-left-up.tmx @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Source/Sandbox/Content/test-tileset-right-down.tmx b/Source/Sandbox/Content/test-tileset-right-down.tmx new file mode 100644 index 00000000..32a50cfc --- /dev/null +++ b/Source/Sandbox/Content/test-tileset-right-down.tmx @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Source/Sandbox/Content/test-tileset-right-up.tmx b/Source/Sandbox/Content/test-tileset-right-up.tmx new file mode 100644 index 00000000..4e11118a --- /dev/null +++ b/Source/Sandbox/Content/test-tileset-right-up.tmx @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Source/Sandbox/SandboxGame.cs b/Source/Sandbox/SandboxGame.cs index 505780e5..38d18a71 100644 --- a/Source/Sandbox/SandboxGame.cs +++ b/Source/Sandbox/SandboxGame.cs @@ -43,8 +43,8 @@ namespace Sandbox _viewportAdapter = new BoxingViewportAdapter(GraphicsDevice, 800, 480); _camera = new Camera2D(_viewportAdapter) { - Zoom = 0.5f, - Position = new Vector2(900, 650) + Zoom = 1.5f, + //Position = new Vector2(900, 650) }; Window.AllowUserResizing = true; @@ -58,7 +58,7 @@ namespace Sandbox _spriteBatch = new SpriteBatch(GraphicsDevice); _backgroundTexture = Content.Load("hills"); _bitmapFont = Content.Load("courier-new-32"); - _tiledMap = Content.Load("level01"); + _tiledMap = Content.Load("test-tileset-left-down"); } protected override void UnloadContent()