using System; using System.Collections; using System.Collections.Generic; using Unity.Mathematics; using UnityEngine; using Sirenix.OdinInspector; using static UguiToolkit.Editor.LayoutInfo; namespace UguiToolkit.Editor { public class CacheScriptObject : SerializedScriptableObject { public Dictionary panelCaches = new(); } [Serializable] public class PanelCache { [LabelText("源图片文件夹路径"), FolderPath] public string srcImgDirPath; [LabelText("目标图片信息文件(psd导出)"), FolderPath] public string layoutInfoFilePath; // Sample.layout.txt [LabelText("目标图片文件夹路径")] public string TargetImgDirPath => GetTargetImgDirPath(layoutInfoFilePath); // 通过ElementInfo创建所有Actor // 1. 鼠标选中img或者text,1s 后触发助手 // img // 2. 通过img的图片路径,查找rotScaleInfos,获得匹配的旋转缩放信息. 如果没有查找到则return // 3. 通过img的图片路径, 查找ActorManager, 获得所有和图片路径匹配的Actor,并显示所有匹配的Actor // 4. 每帧刷新,如果鼠标进入Actor的rect中,则播放scale动效。鼠标松开,则apply 该actor的 trasform // text // 2. 每帧刷新,查找圆形范围内,所有text Actor,并显示所有匹配的Actor // 3. 每帧刷新,如果鼠标进入Actor的rect中,则播放scale动效。鼠标松开,则apply 该actor的 trasform // 通过cmd计算获得 图片路径(源图) -> 旋转缩放信息(效果图) public Dictionary> rotScaleInfos = new(); public LayoutInfo layoutInfo; public IEnumerator GetLayoutElementInfos() where T : LayoutInfo.ElementInfo { if (layoutInfo == null) yield break; foreach (var e in layoutInfo) { if (e is T) { yield return e as T; } } } public static string GetTargetImgDirPath(in string layoutInfoFilePath) { if (string.IsNullOrWhiteSpace(layoutInfoFilePath)) return ""; var dirName = System.IO.Path.GetDirectoryName(layoutInfoFilePath); var fileName = System.IO.Path.GetFileName(layoutInfoFilePath); var split = fileName.Split("."); if (split.Length == 0) return ""; return System.IO.Path.Join(dirName, split[0]); } } [Serializable] public class LayoutInfo: IEnumerable { private List m_elementInfos; private float m_w; private float m_h; public float W => m_w; public float H => m_h; public LayoutInfo(List elementInfos, float w, float h) { this.m_elementInfos = elementInfos; this.m_w = w; this.m_h = h; } public IEnumerator GetEnumerator() { return ((IEnumerable)m_elementInfos).GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)m_elementInfos).GetEnumerator(); } [Serializable] public class ElementInfo { public string name; public float x; public float y; public float w; public float h; public LayoutInfo layoutInfo; public float2 Position { get { float x = (layoutInfo.W / 2f) * -1 + this.x + this.w / 2f; float y = layoutInfo.H / 2f - this.y - this.h / 2f; return new float2(x, y); } } public Rect Rect { get { var pos = Position - new float2(this.w / 2f, this.h / 2f); return new(pos.x, pos.y, this.w, this.h); } } } [Serializable] public class ImageInfo : ElementInfo { public string imgPath; } [Serializable] public class TextInfo : ElementInfo { public string text; public float size; public Color color; public string align; public string font; } } [Serializable] public struct TargetImageTransformInfo { public float3 position; public RotScaleInfoItem rotScaleInfo; public string ImgPath => rotScaleInfo.imgPath; } [Serializable] public struct RotScaleInfoItem { public string imgPath; //(效果图) public float rotiation; public float2 scale; } }