using System.Collections.Generic; using System; using Newtonsoft.Json; using UnityEngine; namespace UguiToolkit.Editor { public interface ILayoutParser { LayoutInfo Parser(string txt); } public class DefaultLayoutParser : ILayoutParser { public LayoutInfo Parser(string txt) { var layoutJsonData = JsonConvert.DeserializeObject(txt); List elementInfos = new(); LayoutInfo layoutInfo = new(elementInfos, layoutJsonData.info.canvas.size.w, layoutJsonData.info.canvas.size.h); void AddElementInfo(LayoutElementJsonData layoutElementJsonData) { if (layoutElementJsonData.type == "Image") { elementInfos.Add(new LayoutInfo.ImageInfo() { imgPath = layoutElementJsonData.imageName, x = layoutElementJsonData.x, y = layoutElementJsonData.y, w = layoutElementJsonData.w, h = layoutElementJsonData.h, layoutInfo = layoutInfo }); } else if (layoutElementJsonData.type == "Text") { // TODO } if (layoutElementJsonData.elements != null) { foreach (var e in layoutElementJsonData.elements) AddElementInfo(e); } } AddElementInfo(layoutJsonData.root); return layoutInfo; } } [Serializable] public class LayoutJsonData { public LayoutInfoJsonData info; public LayoutElementJsonData root; } [Serializable] public class LayoutInfoJsonData { public string version; public CanvasInfoJsonData canvas; [Serializable] public class CanvasInfoJsonData { public CanvasSizeJsonData size; [Serializable] public struct CanvasSizeJsonData { public float w; public float h; } } } [Serializable] public class LayoutElementJsonData { public string type; public string name; public float x; public float y; public float w; public float h; public List elements; public string imageName; } }