unityzgy/Assets/Scripts/UIScripts/ThisProjectPublic/EditorContentCtrl.cs
ayuan9957 1481c1c6f3 fix: 统一装备图标 + 评估翻译 + 警告清理 + 连续训练修复
- EditorContentCtrl: 统一使用carIcon.png作为所有装备图标
- TransportScoreCtrl: 添加LanguageChanged订阅实时翻译最短耗时/转运耗时
- AppraiseSliderCtrl: 评价指标名称用Get()翻译
- WaitResultPanel: 评价等级用Get()翻译避免先闪中文
- EditorAppraiser: 厂区距离提示中厂区名称先Get()翻译
- GameObjectManager: 距离提示用Get()翻译
- StudentSub2EditorPanel: Text_terrainName同步+实时翻译, SetPromptLocalized
- StudentSub1EditorPanel: 地形名SetFormatted+DisplayName实时翻译
- Subject1EditorCtrl: InitCarIcon用RemoveAll+CreatChildren重建
- Subject2EditorCtrl: 编辑想定设置地形下拉框, CreatOnMapCar回退装备列表图标
- SubStart: 车辆列表为空时回退CameraPos定位相机
- StreamingAssetsManager: 移除GetPath中Debug.LogWarning
- 5吨火炮拆装车_Tex替换为统一图标
- 新增评估因素/分组错误翻译条目
- 所有UI预制体verticalOverflow改为Overflow
2026-08-04 14:10:01 +08:00

120 lines
3.7 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)
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)
{
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);
}
}
}
}