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 selectionEquip = new List(); List selectionPerson = new List(); List seletionTuFa = new List(); 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(ResourcesManager.GetPath(tufaInstancePrefabName)); equipContent = ActivePanel.FindChildTrans("Content_equip").GetComponent(); personContent = ActivePanel.FindChildTrans("Content_person").GetComponent(); tufaContent = ActivePanel.FindChildTrans("Content_tufa").GetComponent(); string[] carsName = DBManager.Instance.GetABNames(ABType.装备);//File.ReadAllLines(equipPath); equipContent.CreatChildren(carsName, EquipIconCreatOver); string[] personNames = File.ReadAllLines(personPath); personContent.CreatChildren(personNames); List tufaNames = new List(); 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().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(); tempIcon.SetName(iconSp.text_IconName.text); tempIcon.SetSprite(iconSp.image_Icon.sprite); } public override void OnStart() { base.OnStart(); EventCenter.Instance.AddEventListener("SelectEquipEditor", SelectEquip); EventCenter.Instance.AddEventListener("SelectPersonEditor", SelectPerson); EventCenter.Instance.AddEventListener("SelectTuFaEditor", SelectTuFa); EventCenter.Instance.AddEventListener("CreatTuFa", CreatTuFaInstance); EventCenter.Instance.AddEventListener("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; /// /// 图标资源加载完成后创建想定文件中记录的车辆 仅首次加载本界面时触发 /// 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 selectPerson = new Dictionary(); 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(); 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 selectCars = new Dictionary(); 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("SelectEquipEditor", SelectEquip); EventCenter.Instance.RemoveEnvetListener("SelectPersonEditor", SelectPerson); EventCenter.Instance.RemoveEnvetListener("SelectTuFaEditor", SelectTuFa); EventCenter.Instance.RemoveEnvetListener("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(); } }