unityzgy/Assets/Scripts/UIScripts/ThisProjectPublic/EditorContentCtrl.cs

120 lines
3.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using XFramework;
/// <summary>
/// 拖拽展示所有的数据框
/// </summary>
public class EditorContentCtrl : MonoBehaviour
{
public GameObject childPrefab;
Dictionary<string, IconBase> iconDic = new Dictionary<string, IconBase>();
[Header("需要更新图标样式时勾选")]
public bool needSprite;
[Header("内部数据时勾选 否则加载外部数据")]
public bool buildInSprite;
public Dictionary<string, IconBase> children { get { return iconDic; } }
private static Sprite _unifiedSprite;
private static Sprite GetUnifiedSprite()
{
if (_unifiedSprite == null)
_unifiedSprite = Resources.Load<Sprite>("carIcon");
return _unifiedSprite;
}
public async void CreatChildren(string[] carsName, UnityAction CreatOverEvent = null)
{
Sprite unified = GetUnifiedSprite();
for (int i = 0; i < carsName.Length; i++)
{
IconBase icon = GetIcon(carsName[i]);
if (unified != null && !buildInSprite)
icon.SetSprite(unified);
else if (needSprite && !buildInSprite)
{
string path = StreamingAssetsManager.GetPath($"{carsName[i]}_Tex");
Sprite sprite = await OutSpriteLoader.LoadSprite(path);
icon.SetSprite(sprite);
}
else if (needSprite && buildInSprite)
{
Sprite sprite = Resources.Load<Sprite>(ResourcesManager.GetPath(carsName[i]));
icon.SetSprite(sprite);
}
CreatOverAndInitIcon(carsName[i], null, icon);
}
CreatOverEvent?.Invoke();
}
public async void AddChild(string childName, object initMsg = null)
{
IconBase iconBase = GetIcon(childName);
Sprite unified = GetUnifiedSprite();
if (unified != null && !buildInSprite)
{
iconBase.SetSprite(unified);
}
else if (needSprite)
{
Sprite sprite;
if (buildInSprite)
sprite = Resources.Load<Sprite>(ResourcesManager.GetPath(childName));
else
{
string path = StreamingAssetsManager.GetPath($"{childName}_Tex");
sprite = await OutSpriteLoader.LoadSprite(path);
}
iconBase.SetSprite(sprite);
}
CreatOverAndInitIcon(childName, initMsg, iconBase);
}
private void CreatOverAndInitIcon(string childName, object initMsg, IconBase iconBase)
{
iconDic[childName] = iconBase;
iconBase.SetName(childName);
if (initMsg != null)
iconBase.SetUpdateIconMsg(initMsg);
}
private IconBase GetIcon(string childName)
{
IconBase iconBase;
if (iconDic.ContainsKey(childName))
iconBase = iconDic[childName];
else
iconBase = Instantiate<GameObject>(childPrefab, this.transform).GetComponent<IconBase>();
return iconBase;
}
public void RemoveChild(string childName)
{
if (!iconDic.ContainsKey(childName)) return;
GameObject.Destroy(iconDic[childName].gameObject);
iconDic.Remove(childName);
DBManager.Instance.DeleteABMsg(childName);
}
public void RemoveAll()
{
foreach (var item in iconDic)
Destroy(item.Value.gameObject);
iconDic.Clear();
}
public void SetInitMsg<TKey, TValue>(Dictionary<TKey, TValue> msgDic)
{
if (msgDic != null)
{
foreach (var item in msgDic)
{
if (iconDic.ContainsKey(item.Key.ToString()))
iconDic[item.Key.ToString()].SetUpdateIconMsg(item.Value);
}
}
}
}