| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- #if UNITY_EDITOR
- using System;
- using System.Collections.Generic;
- using System.Reflection;
- using Sirenix.OdinInspector;
- using Sirenix.Serialization;
- using UnityEngine;
- namespace YIUIFramework.Editor
- {
- [HideLabel]
- [HideReferenceObjectPicker]
- internal class UIRedDotKeyView : BaseCreateModule
- {
- private UIRedDotModule m_UIRedDotModule;
- private RedDotKeyAsset m_RedDotKeyAsset;
- private EnumPrefs<ERedDotKeyViewIndexType> m_ERedDotKeyViewIndexTypePrefs =
- new EnumPrefs<ERedDotKeyViewIndexType>("AutoUIRedDotModule_ERedDotKeyViewIndexTypePrefs", null,
- ERedDotKeyViewIndexType.Add);
- [EnumToggleButtons]
- [HideLabel]
- [ShowInInspector]
- [OnValueChanged("OnValueChangedKeyViewIndex")]
- private ERedDotKeyViewIndexType m_ERedDotKeyViewIndexType = ERedDotKeyViewIndexType.Add;
- [HideInInspector]
- private ERedDotKeyViewIndexType m_LastKeyViewIndex = ERedDotKeyViewIndexType.Add;
- private void OnValueChangedKeyViewIndex()
- {
- m_ERedDotKeyViewIndexTypePrefs.Value = m_ERedDotKeyViewIndexType;
- if (m_ERedDotKeyViewIndexType == ERedDotKeyViewIndexType.Add)
- {
- return;
- }
- if (m_LastKeyViewIndex != ERedDotKeyViewIndexType.Add)
- {
- return;
- }
- if (m_WaitCreate)
- {
- CreateKeyEnumClass();
- }
- }
- [OdinSerialize]
- [ReadOnly]
- [PropertyOrder(1000000)]
- [BoxGroup("预览", centerLabel: true)]
- [HideLabel]
- [ShowInInspector]
- [DictionaryDrawerSettings(DisplayMode = DictionaryDisplayOptions.Foldout)]
- private IReadOnlyDictionary<int, RedDotKeyData> m_AllRedDotKey;
- public UIRedDotKeyView(UIRedDotModule redDotModule)
- {
- m_UIRedDotModule = redDotModule;
- m_RedDotKeyAsset = redDotModule.m_RedDotKeyAsset;
- m_AllRedDotKey = m_RedDotKeyAsset.AllRedDotDic;
- }
- public override void Initialize()
- {
- NewAddRedDataKeyData();
- m_ERedDotKeyViewIndexType = m_ERedDotKeyViewIndexTypePrefs.Value;
- OnValueChangedKeyViewIndex();
- m_UIRedDotModule.OnChangeViewSetIndex += OnChangeViewSetIndex;
- CheckContrastRedDotKey();
- }
- private void CheckContrastRedDotKey()
- {
- var enumKeyList = GetERedDotKeyTypeList();
- if (m_AllRedDotKey.Count != enumKeyList.Count)
- {
- UnityTipsHelper.CallBack($"当前配置数据 长度:{m_AllRedDotKey.Count} 与 枚举数据 长度:{enumKeyList.Count} 不一致 请重新生成 或是ET没编译过 没检测到 请检查",
- CreateKeyEnumClass);
- }
- }
- private List<int> GetERedDotKeyTypeList()
- {
- var list = new List<int>();
- foreach (int key in RedDotKeyHelper.GetKeys())
- {
- if (key != 0)
- {
- list.Add(key);
- }
- }
- return list;
- }
- private void OnChangeViewSetIndex(UIRedDotModule.EUIRedDotViewType obj)
- {
- if (obj != UIRedDotModule.EUIRedDotViewType.Key)
- {
- if (m_WaitCreate)
- {
- CreateKeyEnumClass();
- }
- }
- }
- public override void OnDestroy()
- {
- m_UIRedDotModule.OnChangeViewSetIndex -= OnChangeViewSetIndex;
- if (m_WaitCreate)
- {
- CreateKeyEnumClass();
- }
- }
- private bool m_WaitCreate = false;
- [BoxGroup("生成", centerLabel: true)]
- [Button("自动生成Key枚举类", 50)]
- [ShowIf("m_WaitCreate")]
- [PropertyOrder(10000)]
- [GUIColor(0.4f, 0.8f, 1)]
- private void CreateKeyEnumClass()
- {
- m_WaitCreate = false;
- var createData = new UICreateRedDotKeyData
- {
- AutoRefresh = true,
- ShowTips = true,
- ClassPath = m_UIRedDotModule.UIRedDotKeyClassPath,
- Content = UICreateRedDotKeyGet.Get(m_RedDotKeyAsset.GetDataList()),
- };
- new UICreateRedDotKeyCode(out var resultBase, YIUIAutoTool.Author, createData);
- if (!resultBase) return;
- }
- #region 增删改查
- #region 增
- [HideLabel]
- [ShowInInspector]
- [ShowIf("m_ERedDotKeyViewIndexType", ERedDotKeyViewIndexType.Add)]
- [PropertyOrder(2001)]
- [BoxGroup("添加数据", centerLabel: true)]
- private RedDotKeyData m_AddKeyData;
- [ButtonGroup("添加")]
- [Button("添加(生成)", 50)]
- [GUIColor(0, 1, 0)]
- [ShowIf("m_ERedDotKeyViewIndexType", ERedDotKeyViewIndexType.Add)]
- [PropertyOrder(2002)]
- private void AddKeyCreateBtn()
- {
- AddKey();
- }
- [ButtonGroup("添加")]
- [Button("添加(不生成)", 50)]
- [GUIColor(1, 1, 0)]
- [ShowIf("m_ERedDotKeyViewIndexType", ERedDotKeyViewIndexType.Add)]
- [PropertyOrder(2002)]
- private void AddKeyBtn()
- {
- var result = AddKey(false);
- if (result)
- {
- m_WaitCreate = true;
- }
- }
- private bool AddKey(bool createKey = true)
- {
- var (result, tips) = m_RedDotKeyAsset.AddKey(m_AddKeyData);
- NewAddRedDataKeyData();
- if (!result)
- {
- UnityTipsHelper.Show($"{tips} 建议可以直接参考默认ID");
- }
- else
- {
- if (createKey)
- {
- CreateKeyEnumClass();
- }
- else
- {
- UnityTipsHelper.Show(tips);
- }
- }
- return result;
- }
- private void NewAddRedDataKeyData()
- {
- var id = m_RedDotKeyAsset.GetSafetyId();
- m_AddKeyData = new RedDotKeyData(id);
- }
- #endregion
- #region 删
- //TODO 目前删除/修改 前检测只做了配置档
- //最终目标应该还额外扫描其他的
- //1 预制体 关联了那些红点的预制体 上面会关联Key 这个对应的修改删除
- //2 代码 某些代码会涉及到 获取 修改等 也对应的修改删除
- [ShowInInspector]
- [ShowIf("m_ERedDotKeyViewIndexType", ERedDotKeyViewIndexType.Delete)]
- [LabelText("删除的ID")]
- [PropertyOrder(3001)]
- [BoxGroup("删除数据", centerLabel: true)]
- private int m_DeleteId = 0;
- [Button("删除", 50)]
- [GUIColor(1f, 0.3f, 0.3f)]
- [ShowIf("m_ERedDotKeyViewIndexType", ERedDotKeyViewIndexType.Delete)]
- [PropertyOrder(3002)]
- private void DeleteKeyBtn()
- {
- if (!m_RedDotKeyAsset.ContainsKey(m_DeleteId))
- {
- UnityTipsHelper.Show($"当前ID不存在 无法移除 {m_DeleteId}");
- return;
- }
- var linkData =
- UIRedDotKeyEditorHelper.GetCheckKeyLink(m_UIRedDotModule.m_RedDotConfigAsset, m_DeleteId);
- if (linkData.ConfigSet || linkData.LinkKey.Count >= 1)
- {
- var configSetTips = linkData.ConfigSet ? "已配置" : "未配置";
- var linkTips = $"关联引用 {linkData.LinkKey.Count}";
- foreach (var linkKey in linkData.LinkKey)
- {
- linkTips += $"\n已被 {linkKey} 设定为父级";
- }
- var unityTips = $"{linkData.Key} 已被使用 确定删除吗?\n\n{configSetTips}\n{linkTips}\n\n同步的将会删除所有关联数据";
- UnityTipsHelper.CallBack(unityTips, () =>
- {
- DeleteKey((result) =>
- {
- if (!result) return;
- UIRedDotKeyEditorHelper.RemoveKeyByLink(m_UIRedDotModule.m_RedDotConfigAsset, linkData);
- CreateKeyEnumClass();
- YIUIAutoTool.CloseWindowRefresh();
- }, false);
- });
- }
- else
- {
- DeleteKey((result) =>
- {
- if (!result) return;
- CreateKeyEnumClass();
- });
- }
- }
- private void DeleteKey(Action<bool> resultAction = null, bool showTips = true)
- {
- var (result, tips) = m_RedDotKeyAsset.RemoveKey(m_DeleteId);
- if (showTips)
- UnityTipsHelper.Show(tips);
- m_DeleteId = 0;
- resultAction?.Invoke(result);
- }
- #endregion
- #region 改
- //TODO 目前删除/修改 前检测只做了配置档
- //最终目标应该还额外扫描其他的
- //1 预制体 关联了那些红点的预制体 上面会关联Key 这个对应的修改删除
- //2 代码 某些代码会涉及到 获取 修改等 也对应的修改删除
- [HideLabel]
- [ShowInInspector]
- [ShowIf("ShowIfChangeKeyData")]
- [PropertyOrder(4001)]
- [BoxGroup("修改数据", centerLabel: true)]
- private RedDotKeyData m_ChangeKeyData;
- private bool ShowIfChangeKeyData()
- {
- if (m_ERedDotKeyViewIndexType != ERedDotKeyViewIndexType.Change)
- {
- return false;
- }
- return m_ChangeKeyData != null;
- }
- [Button("修改", 50)]
- [GUIColor(0.7f, 0.4f, 0.8f)]
- [ShowIf("m_ERedDotKeyViewIndexType", ERedDotKeyViewIndexType.Change)]
- [PropertyOrder(4002)]
- private void ChangeKeyBtn()
- {
- if (m_ChangeKeyData == null)
- {
- UnityTipsHelper.Show($"请先 查询>>设置 需要修改的数据");
- return;
- }
- var linkData =
- UIRedDotKeyEditorHelper.GetCheckKeyLink(m_UIRedDotModule.m_RedDotConfigAsset, m_GetKeyData.Id);
- if (linkData.ConfigSet || linkData.LinkKey.Count >= 1)
- {
- var configSetTips = linkData.ConfigSet ? "已配置" : "未配置";
- var linkTips = $"关联引用 {linkData.LinkKey.Count}";
- foreach (var linkKey in linkData.LinkKey)
- {
- linkTips += $"\n已被 {linkKey} 设定为父级";
- }
- var unityTips = $"{linkData.Key} 已被使用 确定修改吗?\n\n{configSetTips}\n{linkTips}\n\n同步的将会修改所有关联数据";
- UnityTipsHelper.CallBack(unityTips, () =>
- {
- ChangeKey((result) =>
- {
- if (!result) return;
- CreateKeyEnumClass();
- UIRedDotKeyEditorHelper.ChangeKeyByLink(m_UIRedDotModule.m_RedDotConfigAsset, linkData,
- m_ChangeKeyData);
- YIUIAutoTool.CloseWindowRefresh();
- }, false);
- });
- }
- else
- {
- ChangeKey((result) =>
- {
- if (!result) return;
- CreateKeyEnumClass();
- });
- }
- }
- private void ChangeKey(Action<bool> resultAction = null, bool showTips = true)
- {
- if (m_ChangeKeyData == null)
- {
- UnityTipsHelper.Show($"请先 查询>>设置 需要修改的数据");
- return;
- }
- var (result, tips) = m_RedDotKeyAsset.ChangeKey(m_GetKeyData.Id, m_ChangeKeyData);
- if (showTips)
- UnityTipsHelper.Show(tips);
- resultAction?.Invoke(result);
- if (result)
- {
- m_GetKeyData = null;
- m_ChangeKeyData = null;
- }
- }
- private void UpdateChangeData(RedDotKeyData getData)
- {
- if (getData == null)
- {
- m_ChangeKeyData = null;
- return;
- }
- m_ChangeKeyData = new RedDotKeyData(getData.Id, getData.Des);
- }
- #endregion
- #region 查
- [ShowInInspector]
- [HideIf("m_ERedDotKeyViewIndexType", ERedDotKeyViewIndexType.Add)]
- [LabelText("查询的ID")]
- [PropertyOrder(1001)]
- [InlineButton("GetKey", "查询")]
- [BoxGroup("查询数据", centerLabel: true)]
- [GUIColor(1, 1, 0)]
- private int m_GetId = 1;
- [ShowInInspector]
- [ReadOnly]
- [ShowIf("ShowGetKeyData")]
- [BoxGroup("查询数据", centerLabel: true)]
- [PropertyOrder(1002)]
- private RedDotKeyData m_GetKeyData;
- private bool ShowGetKeyData()
- {
- if (m_ERedDotKeyViewIndexType == ERedDotKeyViewIndexType.Add)
- {
- return false;
- }
- return m_GetKeyData != null;
- }
- private void GetKey()
- {
- var (data, tips) = m_RedDotKeyAsset.GetKey(m_GetId);
- m_GetKeyData = data;
- UnityTipsHelper.Show(tips);
- UpdateChangeData(data);
- }
- #endregion
- #endregion
- [HideLabel]
- private enum ERedDotKeyViewIndexType
- {
- [LabelText("增")]
- Add = 1,
- [LabelText("删")]
- Delete = 2,
- [LabelText("改")]
- Change = 3,
- [LabelText("查")]
- Get = 4,
- }
- }
- }
- #endif
|