Add Group to Model and to TmxSerializer

This commit is contained in:
Daniel Cronqvist 2024-07-27 23:53:05 +02:00
parent 6349471a58
commit 5193ab5b61
7 changed files with 61 additions and 2 deletions

View file

@ -8,8 +8,6 @@ public abstract class BaseLayer
public required uint ID { get; set; } public required uint ID { get; set; }
public string Name { get; set; } = ""; public string Name { get; set; } = "";
public string Class { get; set; } = ""; public string Class { get; set; } = "";
public uint X { get; set; } = 0;
public uint Y { get; set; } = 0;
public float Opacity { get; set; } = 1.0f; public float Opacity { get; set; } = 1.0f;
public bool Visible { get; set; } = true; public bool Visible { get; set; } = true;
public Color? TintColor { get; set; } public Color? TintColor { get; set; }

View file

@ -0,0 +1,11 @@
using System.Collections.Generic;
namespace DotTiled;
public class Group : BaseLayer
{
// Uses same attributes as BaseLayer
// Any number of
public List<BaseLayer> Layers { get; set; } = [];
}

View file

@ -3,6 +3,8 @@ namespace DotTiled;
public class ImageLayer : BaseLayer public class ImageLayer : BaseLayer
{ {
// Attributes // Attributes
public uint X { get; set; } = 0;
public uint Y { get; set; } = 0;
public required bool RepeatX { get; set; } public required bool RepeatX { get; set; }
public required bool RepeatY { get; set; } public required bool RepeatY { get; set; }

View file

@ -11,6 +11,8 @@ public enum DrawOrder
public class ObjectLayer : BaseLayer public class ObjectLayer : BaseLayer
{ {
// Attributes // Attributes
public uint X { get; set; } = 0;
public uint Y { get; set; } = 0;
public uint? Width { get; set; } public uint? Width { get; set; }
public uint? Height { get; set; } public uint? Height { get; set; }
public required Color? Color { get; set; } public required Color? Color { get; set; }

View file

@ -3,6 +3,8 @@ namespace DotTiled;
public class TileLayer : BaseLayer public class TileLayer : BaseLayer
{ {
// Attributes // Attributes
public uint X { get; set; } = 0;
public uint Y { get; set; } = 0;
public required uint Width { get; set; } public required uint Width { get; set; }
public required uint Height { get; set; } public required uint Height { get; set; }

View file

@ -69,6 +69,7 @@ public partial class TmxSerializer
"layer" => () => layers.Add(ReadTileLayer(r, dataUsesChunks: infinite)), "layer" => () => layers.Add(ReadTileLayer(r, dataUsesChunks: infinite)),
"objectgroup" => () => layers.Add(ReadObjectLayer(r)), "objectgroup" => () => layers.Add(ReadObjectLayer(r)),
"imagelayer" => () => layers.Add(ReadImageLayer(r)), "imagelayer" => () => layers.Add(ReadImageLayer(r)),
"group" => () => layers.Add(ReadGroup(r)),
_ => r.Skip _ => r.Skip
}); });

View file

@ -102,4 +102,47 @@ public partial class TmxSerializer
RepeatY = repeatY RepeatY = repeatY
}; };
} }
private Group ReadGroup(XmlReader reader)
{
var id = reader.GetRequiredAttributeParseable<uint>("id");
var name = reader.GetOptionalAttribute("name") ?? "";
var @class = reader.GetOptionalAttribute("class") ?? "";
var opacity = reader.GetOptionalAttributeParseable<float>("opacity") ?? 1.0f;
var visible = reader.GetOptionalAttributeParseable<bool>("visible") ?? true;
var tintColor = reader.GetOptionalAttributeClass<Color>("tintcolor");
var offsetX = reader.GetOptionalAttributeParseable<float>("offsetx") ?? 0.0f;
var offsetY = reader.GetOptionalAttributeParseable<float>("offsety") ?? 0.0f;
var parallaxX = reader.GetOptionalAttributeParseable<float>("parallaxx") ?? 1.0f;
var parallaxY = reader.GetOptionalAttributeParseable<float>("parallaxy") ?? 1.0f;
Dictionary<string, IProperty>? properties = null;
List<BaseLayer> layers = [];
reader.ProcessChildren("group", (r, elementName) => elementName switch
{
"properties" => () => Helpers.SetAtMostOnce(ref properties, ReadProperties(r), "Properties"),
"layer" => () => layers.Add(ReadTileLayer(r, dataUsesChunks: false)),
"objectgroup" => () => layers.Add(ReadObjectLayer(r)),
"imagelayer" => () => layers.Add(ReadImageLayer(r)),
"group" => () => layers.Add(ReadGroup(r)),
_ => r.Skip
});
return new Group
{
ID = id,
Name = name,
Class = @class,
Opacity = opacity,
Visible = visible,
TintColor = tintColor,
OffsetX = offsetX,
OffsetY = offsetY,
ParallaxX = parallaxX,
ParallaxY = parallaxY,
Properties = properties,
Layers = layers
};
}
} }