208 lines
8.0 KiB
C#
208 lines
8.0 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using UnityEngine;
|
|
using XFramework;
|
|
|
|
public class Subject2EditorCtrl : SubjectEditorBase
|
|
{
|
|
const string panelName = "Panel_subjects2Editor";
|
|
public EditorContentCtrl equipContent;
|
|
//public EditorContentCtrl childEquipContent;
|
|
//public EditorContentCtrl personContent;
|
|
public CarDetailCtrl CarDetail;
|
|
|
|
public GameObject carInstacnePrefab;
|
|
public GameObject onboardInstancePrefab;
|
|
|
|
public List<CarIconInstanceCtrl> onMapCars = new List<CarIconInstanceCtrl>();//放置在地图上的图标 不包括生成未完成放置的
|
|
List<string> allCarNames = new List<string>();//记录已经放置在地图上的车辆名称 避免重名
|
|
|
|
string personPath = Application.streamingAssetsPath + "/Config/人员库.txt";
|
|
|
|
private IconBase currentDragIcon;
|
|
Sub2RecordClass recordClass ;
|
|
|
|
|
|
public Subject2EditorCtrl():base(panelName)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
// Start is called before the first frame update
|
|
protected override void InitEvent()
|
|
{
|
|
base.InitEvent();
|
|
|
|
//EventCenter.Instance.AddEventListener<IconBase>("CreatOnboard", CreatOnboardInstance); //无需摆放人员 暂时注释
|
|
carInstacnePrefab = Resources.Load<GameObject>(ResourcesManager.GetPath("Image_carInstance"));
|
|
onboardInstancePrefab = Resources.Load<GameObject>(ResourcesManager.GetPath("Image_onboardInstance"));
|
|
|
|
equipContent = ActivePanel.FindChildTrans("Content_equip").GetComponent<EditorContentCtrl>();
|
|
//personContent = ActivePanel.FindChildTrans("Content_person").GetComponent<EditorContentCtrl>();
|
|
CarDetail = ActivePanel.transform.Find("Image_装备详情").GetComponent<CarDetailCtrl>();
|
|
recordClass = null;
|
|
InitContentIcon();
|
|
}
|
|
|
|
//弹出本窗口时 隐藏详情界面 注册界面监听事件
|
|
public override void OnStart()
|
|
{
|
|
base.OnStart();
|
|
CarDetail.Hide();
|
|
EventCenter.Instance.AddEventListener<CarIconInstanceCtrl, bool>("SelectCarEditor", AddOrRemoveCarOnMap);
|
|
EventCenter.Instance.AddEventListener<IconBase>("CreatCar", CreatCarInstanceForDrag);
|
|
}
|
|
|
|
//本界面销毁时清空已经创建的物体 注销监听事件
|
|
public override void OnDestroy(bool isDestroy = false)
|
|
{
|
|
base.OnDestroy(isDestroy);
|
|
for (int i = 0; i < onMapCars.Count; i++)
|
|
{
|
|
GameObject.Destroy(onMapCars[i].gameObject);
|
|
}
|
|
onMapCars.Clear();
|
|
allCarNames.Clear();
|
|
EventCenter.Instance.RemoveEnvetListener<CarIconInstanceCtrl, bool>("SelectCarEditor", AddOrRemoveCarOnMap);
|
|
EventCenter.Instance.RemoveEnvetListener<IconBase>("CreatCar", CreatCarInstanceForDrag);
|
|
}
|
|
|
|
//放置/删除一辆车 并生成唯一名称
|
|
private void AddOrRemoveCarOnMap(CarIconInstanceCtrl arg0, bool arg1)
|
|
{
|
|
string carTypeName = arg0.text_IconName.text;
|
|
if (arg1)
|
|
{
|
|
onMapCars.Add(arg0);
|
|
int number = 1;
|
|
string tempName = carTypeName;
|
|
while (allCarNames.Contains(tempName))
|
|
{
|
|
tempName = $"{carTypeName}({number})";
|
|
number++;
|
|
}
|
|
carTypeName = tempName;
|
|
arg0.SetName(carTypeName);
|
|
allCarNames.Add(carTypeName);
|
|
}
|
|
else
|
|
{
|
|
onMapCars.Remove(arg0);
|
|
allCarNames.Remove(carTypeName);
|
|
}
|
|
if (arg0 == currentDragIcon)
|
|
currentDragIcon = null;
|
|
}
|
|
|
|
|
|
////创建一个待放置的 车载物体示例图标
|
|
//private void CreatOnboardInstance(IconBase arg1)
|
|
//{
|
|
// if (tempIcon != null) return;
|
|
// IconCreaterCtrl iconCreater = arg1 as IconCreaterCtrl;
|
|
// tempIcon = GameObject.Instantiate(onboardInstancePrefab, image_Map.transform).GetComponent<OnboardInstanceCtrl>();
|
|
// tempIcon.SetName(arg1.text_IconName.text);
|
|
// tempIcon.SetSprite(arg1.image_Icon.sprite);
|
|
// tempIcon.SetUpdateIconMsg(iconCreater.createrType);
|
|
//}
|
|
|
|
//创建一个待放置的汽车图标实例
|
|
private void CreatCarInstanceForDrag(IconBase arg1)
|
|
{
|
|
if (currentDragIcon != null) return;//当前有拖拽的物体
|
|
currentDragIcon= CreatCarInstance(arg1.text_IconName.text, arg1.image_Icon.sprite);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 创建一个设为地图子物体的车辆图标
|
|
/// </summary>
|
|
/// <param name="name">车辆名称</param>
|
|
/// <param name="sprite">图标</param>
|
|
private IconBase CreatCarInstance(string name, Sprite sprite)
|
|
{
|
|
IconBase newIcon = GameObject.Instantiate(carInstacnePrefab, image_Map.transform).GetComponent<CarIconInstanceCtrl>();
|
|
newIcon.SetName(name);
|
|
newIcon.SetSprite(sprite);
|
|
CarIconIntacneInitData initData = new CarIconIntacneInitData();
|
|
if (OnboardManager.Instance.onboardDic.ContainsKey(name))
|
|
initData.onboardEquipDic[OnboardManager.Instance.onboardDic[name]] = 1;
|
|
newIcon.SetUpdateIconMsg(initData, "Init");
|
|
return newIcon;
|
|
}
|
|
|
|
//教员编辑时 无需分配人员 只关注车辆位置
|
|
void InitContentIcon()
|
|
{
|
|
string[] carsName = DBManager.Instance.GetABNames(ABType.装备);//File.ReadAllLines(equipPath);
|
|
equipContent.CreatChildren(carsName, IconLoadedOver);
|
|
//string[] personNames = File.ReadAllLines(personPath);
|
|
//personContent.CreatChildren(personNames);
|
|
//string[] childEquipNames = DBManager.Instance.GetABNames(ABType.工具);
|
|
//childEquipContent.CreatChildren(childEquipNames);
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void SaveFile()
|
|
{
|
|
recordClass = new Sub2RecordClass();
|
|
recordClass.TerrainName = dropdown_Terrain.options[ dropdown_Terrain.value].text;
|
|
recordClass.taskIntr = input_TaskIntr.text;
|
|
recordClass.fileIntr = input_FileIntr.text;
|
|
recordClass.onMapCars.Clear();
|
|
for (int i = 0; i < onMapCars.Count; i++)
|
|
{
|
|
//recordClass.onMapCars.Add(new OnMapCarData(onMapCars[i].text_IconName.text, onMapCars[i].GetComponent<RectTransform>().anchoredPosition,
|
|
// onMapCars[i].transform.localEulerAngles.z, onMapCars[i].personNames, onMapCars[i].chidlEquipNames));
|
|
recordClass.onMapCars.Add(onMapCars[i].GetCarIconData());
|
|
}
|
|
string path = $"{Application.streamingAssetsPath}/XML/修理所展开/修理所展开科目{DateTime.Now.ToString().Replace('/', '_').Replace(':', ' ')}.xml";
|
|
bool result= XmlHelper.SerializeObjectXML(recordClass, typeof(Sub2RecordClass), path);
|
|
if (result)
|
|
{
|
|
Push(new PromptWindows()).Change(new PromptWindowInitData("想定文件生成成功!文件路径为:{0}", new object[] { path }, null));
|
|
}
|
|
|
|
}
|
|
|
|
bool loadedOver = false;
|
|
/// <summary>
|
|
/// 图标资源加载完成 后创建想定文件中记录的车辆 仅首次加载本界面时触发
|
|
/// </summary>
|
|
void IconLoadedOver()
|
|
{
|
|
loadedOver = true;
|
|
if (recordClass != null)
|
|
{
|
|
CreatOnMapCar(recordClass.onMapCars);
|
|
}
|
|
}
|
|
|
|
//根据想定文件初始化界面
|
|
public override void Change(object value)
|
|
{
|
|
recordClass = value as Sub2RecordClass;
|
|
if(loadedOver)//首次无法触发
|
|
CreatOnMapCar(recordClass.onMapCars);
|
|
}
|
|
|
|
//直接在地图上创建车辆信息
|
|
private async void CreatOnMapCar( List<OnMapCarData> onMapCars)
|
|
{
|
|
for (int i = 0; i < recordClass.onMapCars.Count; i++)//创建车辆图标 并放置在地图上
|
|
{
|
|
string equipTypeName = onMapCars[i].name.Split('(')[0];
|
|
string path = StreamingAssetsManager.GetPath($"{equipTypeName}_Tex");
|
|
Sprite sprite = await OutSpriteLoader.LoadSprite(path);
|
|
IconBase iconBase= CreatCarInstance(onMapCars[i].name, sprite);
|
|
iconBase.GetComponent<DragIcon>()?.SetFixedAnchoredPos(new Vector2(onMapCars[i].aPX, onMapCars[i].aPY));
|
|
AddOrRemoveCarOnMap(iconBase as CarIconInstanceCtrl,true);
|
|
}
|
|
}
|
|
}
|