164 lines
4.8 KiB
C#
164 lines
4.8 KiB
C#
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<GameObject, PanelCache> 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<string, List<RotScaleInfoItem>> rotScaleInfos = new();
|
||
public LayoutInfo layoutInfo;
|
||
|
||
public IEnumerator<T> GetLayoutElementInfos<T>() 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<ElementInfo>
|
||
{
|
||
private List<ElementInfo> m_elementInfos;
|
||
private float m_w;
|
||
private float m_h;
|
||
|
||
public float W => m_w;
|
||
public float H => m_h;
|
||
|
||
public LayoutInfo(List<ElementInfo> elementInfos, float w, float h)
|
||
{
|
||
this.m_elementInfos = elementInfos;
|
||
this.m_w = w;
|
||
this.m_h = h;
|
||
}
|
||
|
||
public IEnumerator<ElementInfo> GetEnumerator()
|
||
{
|
||
return ((IEnumerable<ElementInfo>)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;
|
||
}
|
||
}
|
||
|