2024-10-08 15:19:05 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using Unity.Mathematics;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using Sirenix.OdinInspector;
|
2024-10-21 16:20:39 +00:00
|
|
|
|
using static UguiToolkit.Editor.LayoutInfo;
|
2024-10-08 15:19:05 +00:00
|
|
|
|
|
|
|
|
|
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("目标图片文件夹路径")]
|
2024-10-21 16:20:39 +00:00
|
|
|
|
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
|
2024-10-08 15:19:05 +00:00
|
|
|
|
{
|
2024-10-21 16:20:39 +00:00
|
|
|
|
if (layoutInfo == null) yield break;
|
2024-10-08 15:19:05 +00:00
|
|
|
|
|
2024-10-21 16:20:39 +00:00
|
|
|
|
foreach (var e in layoutInfo)
|
|
|
|
|
{
|
|
|
|
|
if (e is T)
|
|
|
|
|
{
|
|
|
|
|
yield return e as T;
|
|
|
|
|
}
|
2024-10-08 15:19:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-21 16:20:39 +00:00
|
|
|
|
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 "";
|
2024-10-08 16:32:08 +00:00
|
|
|
|
|
2024-10-21 16:20:39 +00:00
|
|
|
|
return System.IO.Path.Join(dirName, split[0]);
|
|
|
|
|
}
|
2024-10-08 16:32:08 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Serializable]
|
2024-10-21 16:20:39 +00:00
|
|
|
|
public class LayoutInfo: IEnumerable<ElementInfo>
|
2024-10-08 16:32:08 +00:00
|
|
|
|
{
|
2024-10-09 16:12:59 +00:00
|
|
|
|
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;
|
|
|
|
|
}
|
2024-10-08 16:32:08 +00:00
|
|
|
|
|
2024-10-21 16:20:39 +00:00
|
|
|
|
public IEnumerator<ElementInfo> GetEnumerator()
|
|
|
|
|
{
|
|
|
|
|
return ((IEnumerable<ElementInfo>)m_elementInfos).GetEnumerator();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
|
|
|
{
|
|
|
|
|
return ((IEnumerable)m_elementInfos).GetEnumerator();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Serializable]
|
2024-10-08 16:32:08 +00:00
|
|
|
|
public class ElementInfo
|
|
|
|
|
{
|
2024-10-21 16:20:39 +00:00
|
|
|
|
public string name;
|
|
|
|
|
|
2024-10-08 16:32:08 +00:00
|
|
|
|
public float x;
|
|
|
|
|
public float y;
|
|
|
|
|
public float w;
|
|
|
|
|
public float h;
|
|
|
|
|
|
2024-10-09 16:12:59 +00:00
|
|
|
|
public LayoutInfo layoutInfo;
|
2024-10-08 16:32:08 +00:00
|
|
|
|
|
2024-10-21 16:20:39 +00:00
|
|
|
|
public float2 Position
|
|
|
|
|
{
|
2024-10-09 16:12:59 +00:00
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-10-21 16:20:39 +00:00
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-10-08 16:32:08 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-10-21 16:20:39 +00:00
|
|
|
|
[Serializable]
|
2024-10-08 16:32:08 +00:00
|
|
|
|
public class ImageInfo : ElementInfo
|
|
|
|
|
{
|
|
|
|
|
public string imgPath;
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-21 16:20:39 +00:00
|
|
|
|
[Serializable]
|
2024-10-08 16:32:08 +00:00
|
|
|
|
public class TextInfo : ElementInfo
|
|
|
|
|
{
|
|
|
|
|
public string text;
|
2024-10-21 16:20:39 +00:00
|
|
|
|
public float size;
|
|
|
|
|
public Color color;
|
|
|
|
|
public string align;
|
|
|
|
|
public string font;
|
2024-10-08 16:32:08 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
|
public struct TargetImageTransformInfo
|
|
|
|
|
{
|
|
|
|
|
public float3 position;
|
|
|
|
|
public RotScaleInfoItem rotScaleInfo;
|
|
|
|
|
|
|
|
|
|
public string ImgPath => rotScaleInfo.imgPath;
|
2024-10-08 15:19:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Serializable]
|
2024-10-08 16:32:08 +00:00
|
|
|
|
public struct RotScaleInfoItem
|
2024-10-08 15:19:05 +00:00
|
|
|
|
{
|
2024-10-08 16:32:08 +00:00
|
|
|
|
public string imgPath; //(效果图)
|
2024-10-08 15:19:05 +00:00
|
|
|
|
public float rotiation;
|
|
|
|
|
public float2 scale;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|