using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using XFramework;
///
/// 拖拽展示所有的数据框
///
public class EditorContentCtrl : MonoBehaviour
{
public GameObject childPrefab;
Dictionary iconDic = new Dictionary();
[Header("需要更新图标样式时勾选")]
public bool needSprite;
[Header("内部数据时勾选 否则加载外部数据")]
public bool buildInSprite;
public Dictionary children { get { return iconDic; } }
///
/// 创建一系列子物体 加载外部UI资源时 使用await等待资源加载完成 内部资源无需等待
///
/// 子物体预制件名称
public async void CreatChildren(string[] carsName,UnityAction CreatOverEvent=null)
{
if (needSprite&& !buildInSprite)//需要加载外部多个资源时
{
string[] paths = new string[carsName.Length];
for (int i = 0; i < carsName.Length; i++)
{
paths[i] = StreamingAssetsManager.GetPath($"{carsName[i]}_Tex");
}
Sprite [] sprites= await OutSpriteLoader.LoadSprites(paths);
for (int i = 0; i < carsName.Length; i++)
{
IconBase icon = GetIcon(carsName[i]);
icon.SetSprite(sprites[i]);
CreatOverAndInitIcon(carsName[i],null,icon);
}
}
else
{
for (int i = 0; i < carsName.Length; i++)
{
if (CreatOverEvent != null && i == carsName.Length - 1)//最后一个加载完成后 触发加载完成事件
{
AddChild(carsName[i], null);
//Debug.Log("开始加载最后一张图片");
}
else
AddChild(carsName[i]);
}
}
CreatOverEvent?.Invoke();
}
//名称重复时不生成新的元素 用新元素的数据覆盖原有的数据
public async void AddChild(string childName,object initMsg=null)
{
//Debug.Log(childName);
IconBase iconBase = GetIcon(childName);
if (needSprite)
{
Sprite sprite;
if (buildInSprite)
{
sprite = Resources.Load(ResourcesManager.GetPath(childName));
}
else
{
string path = StreamingAssetsManager.GetPath($"{childName}_Tex");
sprite = await OutSpriteLoader.LoadSprite(path);
}
iconBase.SetSprite(sprite);
}
CreatOverAndInitIcon(childName, initMsg, iconBase);
//createOver?.Invoke();
}
//图标创建完成 加入字典 设置初始化数据
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(childPrefab, this.transform).GetComponent();
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(Dictionary msgDic)
{
if (msgDic != null)
{
foreach (var item in msgDic)
{
if (iconDic.ContainsKey(item.Key.ToString()))
{
iconDic[item.Key.ToString()].SetUpdateIconMsg(item.Value);
}
}
}
}
}