From e9cf6e01f69a48707bcc16480105c1694a13d48c Mon Sep 17 00:00:00 2001 From: Daniel Cronqvist Date: Sat, 10 Aug 2024 19:24:25 +0200 Subject: [PATCH] Add text object parsing for JSON --- DotTiled/Serialization/Tmj/Tmj.Layer.cs | 63 ++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/DotTiled/Serialization/Tmj/Tmj.Layer.cs b/DotTiled/Serialization/Tmj/Tmj.Layer.cs index 33d87e7..68cd92a 100644 --- a/DotTiled/Serialization/Tmj/Tmj.Layer.cs +++ b/DotTiled/Serialization/Tmj/Tmj.Layer.cs @@ -235,7 +235,7 @@ internal partial class Tmj var polyline = element.GetOptionalPropertyCustom?>("polyline", e => ReadPoints(e), polylineDefault); var properties = element.GetOptionalPropertyCustom?>("properties", e => ReadProperties(e, customTypeDefinitions), propertiesDefault); var rotation = element.GetOptionalProperty("rotation", rotationDefault); - // var text + var text = element.GetOptionalPropertyCustom("text", ReadText, null); var type = element.GetOptionalProperty("type", typeDefault); var visible = element.GetOptionalProperty("visible", visibleDefault); var width = element.GetOptionalProperty("width", widthDefault); @@ -320,7 +320,22 @@ internal partial class Tmj }; } - // Text + if (text is not null) + { + text.ID = id; + text.Name = name; + text.Type = type; + text.X = x; + text.Y = y; + text.Width = width; + text.Height = height; + text.Rotation = rotation; + text.GID = gid; + text.Visible = visible; + text.Template = template; + text.Properties = properties; + return text; + } return new RectangleObject { @@ -363,4 +378,48 @@ internal partial class Tmj Object = @object }; } + + internal static TextObject ReadText(JsonElement element) + { + var bold = element.GetOptionalProperty("bold", false); + var color = element.GetOptionalPropertyParseable("color", s => Color.Parse(s, CultureInfo.InvariantCulture), Color.Parse("#00000000", CultureInfo.InvariantCulture)); + var fontfamily = element.GetOptionalProperty("fontfamily", "sans-serif"); + var halign = element.GetOptionalPropertyParseable("halign", s => s switch + { + "left" => TextHorizontalAlignment.Left, + "center" => TextHorizontalAlignment.Center, + "right" => TextHorizontalAlignment.Right, + _ => throw new JsonException($"Unknown horizontal alignment '{s}'.") + }, TextHorizontalAlignment.Left); + var italic = element.GetOptionalProperty("italic", false); + var kerning = element.GetOptionalProperty("kerning", true); + var pixelsize = element.GetOptionalProperty("pixelsize", 16); + var strikeout = element.GetOptionalProperty("strikeout", false); + var text = element.GetRequiredProperty("text"); + var underline = element.GetOptionalProperty("underline", false); + var valign = element.GetOptionalPropertyParseable("valign", s => s switch + { + "top" => TextVerticalAlignment.Top, + "center" => TextVerticalAlignment.Center, + "bottom" => TextVerticalAlignment.Bottom, + _ => throw new JsonException($"Unknown vertical alignment '{s}'.") + }, TextVerticalAlignment.Top); + var wrap = element.GetOptionalProperty("wrap", false); + + return new TextObject + { + Bold = bold, + Color = color, + FontFamily = fontfamily, + HorizontalAlignment = halign, + Italic = italic, + Kerning = kerning, + PixelSize = pixelsize, + Strikeout = strikeout, + Text = text, + Underline = underline, + VerticalAlignment = valign, + Wrap = wrap + }; + } }