unityzgy/Assets/Scripts/UIScripts/Teacher/Subject1EditorCtrl.cs
ayuan9957 bf12e02276 feat: 多语言本地化系统 - 支持中/英/法/俄实时切换
- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg)
- LoginPanel: InputField placeholder本地化、字体颜色保持
- HistoryPanel: 用时数据本地化、placeholder本地化
- RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建)
- AppraiseWindowBase: 评价等级本地化、操作消息重建
- EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized
- StudentOperateRecorder: 新增InjectOperateMsgLocalized方法
- LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选
- 字体切换时保留颜色和verticalOverflow
2026-07-16 10:05:59 +08:00

222 lines
8.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using XFramework;
using XFramework.Objects;
public class Subject1EditorCtrl : SubjectEditorBase
{
const string panelName = "Panel_subjects1Editor";
List<EquipIconCtrl> selectionEquip = new List<EquipIconCtrl>();
List<PersonIconCtrl> selectionPerson = new List<PersonIconCtrl>();
List<TuFaInstanceIconCtrl> seletionTuFa = new List<TuFaInstanceIconCtrl>();
string personPath = Application.streamingAssetsPath + "/Config/人员库.txt";
GameObject tufaInstancePrefab;
string tufaInstancePrefabName = "Image_tufaInstance";
EditorContentCtrl equipContent;
EditorContentCtrl personContent;
EditorContentCtrl tufaContent;
SubRecordClass recordClass;
public Subject1EditorCtrl() : base(panelName)
{
}
protected override void InitEvent()
{
base.InitEvent();
tufaInstancePrefab = Resources.Load<GameObject>(ResourcesManager.GetPath(tufaInstancePrefabName));
equipContent = ActivePanel.FindChildTrans("Content_equip").GetComponent<EditorContentCtrl>();
personContent = ActivePanel.FindChildTrans("Content_person").GetComponent<EditorContentCtrl>();
tufaContent = ActivePanel.FindChildTrans("Content_tufa").GetComponent<EditorContentCtrl>();
string[] carsName = DBManager.Instance.GetABNames(ABType.);//File.ReadAllLines(equipPath);
equipContent.CreatChildren(carsName, EquipIconCreatOver);
string[] personNames = File.ReadAllLines(personPath);
personContent.CreatChildren(personNames);
List<string> tufaNames = new List<string>();
foreach (string name in Enum.GetNames(typeof(TuFaEnum)))
{
tufaNames.Add(name);
}
//string[] tufaNames = new string[] { "敌机侦察", "敌机打击", "化学沾染地带", "越过染毒地带", "小股敌人袭扰", "道路阻断", "友邻装备轻度损伤" , "友邻装备重度损伤" };
tufaContent.CreatChildren(tufaNames.ToArray());
}
public override void SaveFile()
{
base.SaveFile();
recordClass = new SubRecordClass();
recordClass.TerrainName = dropdown_Terrain.options[dropdown_Terrain.value].text;
recordClass.taskIntr = input_TaskIntr.text;
recordClass.fileIntr = input_FileIntr.text;
recordClass.usedEquips.Clear();
for (int i = 0; i < selectionEquip.Count; i++)
{
string currentName = selectionEquip[i].text_IconName.text;
recordClass.usedEquips.Add(new EquipIconData(currentName, float.Parse(selectionEquip[i].input_Speed.text), int.Parse(selectionEquip[i].input_Count.text), true));
}
recordClass.usedPersons.Clear();
for (int i = 0; i < selectionPerson.Count; i++)
{
recordClass.usedPersons.Add(selectionPerson[i].text_IconName.text);
}
for (int i = 0; i < seletionTuFa.Count; i++)
{
recordClass.tuFaDatas.Add(new TuFaData((TuFaEnum)Enum.Parse(typeof(TuFaEnum), seletionTuFa[i].text_IconName.text), seletionTuFa[i].GetComponent<RectTransform>().anchoredPosition));
}
string path = $"{Application.streamingAssetsPath}/XML/编队行军/编队行军科目{DateTime.Now.ToString().Replace('/', '_').Replace(':', ' ')}.xml";
bool result = XmlHelper.SerializeObjectXML(recordClass, typeof(SubRecordClass), path);
if (result)
{
Push(new PromptWindows()).Change(new PromptWindowInitData(LocalizationManager.Format("想定文件生成成功!文件路径为:{0}", path), null));
}
}
TuFaInstanceIconCtrl tempIcon;//记录生成后尚未定位的突发事件图标
public void CreatTuFaInstance(IconBase iconSp)
{
if (tempIcon != null) return;
tempIcon = ObjectPool.Instance.Instantiate(tufaInstancePrefab, image_Map.transform).GetComponent<TuFaInstanceIconCtrl>();
tempIcon.SetName(iconSp.text_IconName.text);
tempIcon.SetSprite(iconSp.image_Icon.sprite);
}
public override void OnStart()
{
base.OnStart();
EventCenter.Instance.AddEventListener<EquipIconCtrl, bool>("SelectEquipEditor", SelectEquip);
EventCenter.Instance.AddEventListener<PersonIconCtrl, bool>("SelectPersonEditor", SelectPerson);
EventCenter.Instance.AddEventListener<TuFaInstanceIconCtrl, bool>("SelectTuFaEditor", SelectTuFa);
EventCenter.Instance.AddEventListener<IconBase>("CreatTuFa", CreatTuFaInstance);
EventCenter.Instance.AddEventListener<TuFaInstanceIconCtrl>("DestoryTuFaIcon", DsetoryCurrentIcon);
}
//删除一个从未添加过的突发事件
private void DsetoryCurrentIcon(TuFaInstanceIconCtrl destory)
{
if (destory == tempIcon)
tempIcon = null;
}
public void SelectTuFa(TuFaInstanceIconCtrl iconCtrl, bool isOn)
{
if (isOn)
seletionTuFa.Add(iconCtrl);
else
seletionTuFa.Remove(iconCtrl);
if (iconCtrl == tempIcon)
tempIcon = null;
}
public void SelectEquip(EquipIconCtrl iconCtrl, bool isOn)
{
if (isOn)
selectionEquip.Add(iconCtrl);
else
selectionEquip.Remove(iconCtrl);
}
public void SelectPerson(PersonIconCtrl iconCtrl, bool isOn)
{
if (isOn)
selectionPerson.Add(iconCtrl);
else
selectionPerson.Remove(iconCtrl);
}
bool loadedOver = false;
/// <summary>
/// 图标资源加载完成后创建想定文件中记录的车辆 仅首次加载本界面时触发
/// </summary>
void EquipIconCreatOver()
{
loadedOver = true;
if (recordClass != null)
{
InitCarIcon();
}
}
public override void Change(object newData)
{
recordClass = newData as SubRecordClass;
if (recordClass != null)
{
//根据科目初始化选择车辆信息 首次加载时需等待资源加载完成
if (loadedOver)
InitCarIcon();
//根据科目初始化选择人员信息
Dictionary<string, bool> selectPerson = new Dictionary<string, bool>();
for (int i = 0; i < recordClass.usedPersons.Count; i++)
{
selectPerson[recordClass.usedPersons[i]] = true;
}
personContent.SetInitMsg(selectPerson);
for (int i = 0; i < recordClass.tuFaDatas.Count; i++)
{
TuFaData tuFaData = recordClass.tuFaDatas[i];
TuFaInstanceIconCtrl newIcon = ObjectPool.Instance.Instantiate(tufaInstancePrefab, image_Map.transform).GetComponent<TuFaInstanceIconCtrl>();
newIcon.SetName(tuFaData.name.ToString());
newIcon.SetFixedAnchoredPos(new Vector2(tuFaData.posX, tuFaData.posY));
SelectTuFa(newIcon, true);
}
input_FileIntr.text = recordClass.fileIntr;
input_TaskIntr.text = recordClass.taskIntr;
}
}
private void InitCarIcon()
{
Dictionary<string, EquipIconData> selectCars = new Dictionary<string, EquipIconData>();
for (int i = 0; i < recordClass.usedEquips.Count; i++)
{
selectCars[recordClass.usedEquips[i].name] = recordClass.usedEquips[i];
}
equipContent.SetInitMsg(selectCars);
}
//关闭界面时初始化界面
public override void OnDestroy(bool isDestroy = false)
{
base.OnDestroy(isDestroy);
EventCenter.Instance.RemoveEnvetListener<EquipIconCtrl, bool>("SelectEquipEditor", SelectEquip);
EventCenter.Instance.RemoveEnvetListener<PersonIconCtrl, bool>("SelectPersonEditor", SelectPerson);
EventCenter.Instance.RemoveEnvetListener<TuFaInstanceIconCtrl, bool>("SelectTuFaEditor", SelectTuFa);
EventCenter.Instance.RemoveEnvetListener<IconBase>("CreatTuFa", CreatTuFaInstance);
for (int i = 0; i < seletionTuFa.Count; i++)
{
ObjectPool.Instance.Destroy(seletionTuFa[i].gameObject);
}
for (int i = 0; i < selectionEquip.Count; i++)
{
selectionEquip[i].SetUpdateIconMsg(null, "RestValue");
}
for (int i = 0; i < selectionPerson.Count; i++)
{
selectionPerson[i].SetUpdateIconMsg(null, "RestValue");
}
seletionTuFa.Clear();
selectionEquip.Clear();
selectionPerson.Clear();
}
}