- 山地→林地: 场景/AB/数据库/SAMap/本地化/旧想定XML全部改名 - 想定编辑: 深拷贝selectRecord防止引用污染, 设置地形下拉框匹配原文件 - 想定下发: 深拷贝后发送独立副本 - XmlHelper: FileStream改using, 新增字符串反序列化重载 - RecordDetailPanel: OnStart重新订阅LanguageChanged, 完整翻译标题/用时/视频/操作记录 - AppraiseWindowBase: OnLanguageChanged重新翻译标题+操作记录 - LocalizeOperateMsg: 旧消息回退Get()翻译 - 分组提示: ShowSetGroupError用Get()翻译, 新增4条分组错误翻译 - 学员端地形名: SetFormatted+DisplayName实时翻译 - 丘陵: 重新生成地图含道路材质, 重建AB
233 lines
8.8 KiB
C#
233 lines
8.8 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);
|
|
}
|
|
recordClass.tuFaDatas.Clear();
|
|
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("想定文件生成成功!文件路径为:{0}", new object[] { 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)
|
|
{
|
|
//设置地形下拉框为想定文件中记录的地形
|
|
for (int i = 0; i < dropdown_Terrain.options.Count; i++)
|
|
{
|
|
if (dropdown_Terrain.options[i].text == recordClass.TerrainName)
|
|
{
|
|
dropdown_Terrain.value = i;
|
|
dropdown_Terrain.RefreshShownValue();
|
|
break;
|
|
}
|
|
}
|
|
//根据科目初始化选择车辆信息 首次加载时需等待资源加载完成
|
|
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();
|
|
}
|
|
}
|