- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg) - LoginPanel: InputField placeholder本地化、字体颜色保持 - HistoryPanel: 用时数据本地化、placeholder本地化 - RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建) - AppraiseWindowBase: 评价等级本地化、操作消息重建 - EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized - StudentOperateRecorder: 新增InjectOperateMsgLocalized方法 - LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选 - 字体切换时保留颜色和verticalOverflow
601 lines
18 KiB
C#
601 lines
18 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public enum RunState
|
|
{
|
|
/// <summary>
|
|
/// 教员端
|
|
/// </summary>
|
|
teacher,
|
|
/// <summary>
|
|
/// 客户端
|
|
/// </summary>
|
|
student,
|
|
}
|
|
|
|
/// <summary>
|
|
/// 用户数据类
|
|
/// </summary>
|
|
[Serializable]
|
|
public class User
|
|
{
|
|
public UserType userType;
|
|
public string user;
|
|
public string password;
|
|
}
|
|
|
|
//学员记录
|
|
public class RecordClassDemo
|
|
{
|
|
public string user;
|
|
public string msg;
|
|
}
|
|
|
|
//记录学员的操作和教员的评价信息 user+time可组成唯一标识
|
|
public class OperaterRecording
|
|
{
|
|
//学员信息
|
|
public string user;
|
|
//学员训练的开始日期和时间
|
|
public string date;
|
|
|
|
|
|
//训练的科目
|
|
public string subName;
|
|
|
|
//训练的模式 训练/考核
|
|
public string learnType;
|
|
|
|
//训练耗时
|
|
public string useTime;
|
|
|
|
//教师评价等级
|
|
public string appraiseLevel;
|
|
|
|
//指定的录屏视频路径
|
|
public string videoPath;
|
|
|
|
//操作记录 用于查看详情时使用
|
|
public List<string> operaterMsg;
|
|
|
|
|
|
}
|
|
|
|
public enum TurnPageType
|
|
{
|
|
Up,
|
|
Down,
|
|
}
|
|
|
|
public enum MessType
|
|
{
|
|
result,
|
|
user,
|
|
}
|
|
|
|
//用户类型
|
|
public enum UserType
|
|
{
|
|
student,
|
|
Teacher,
|
|
manager,
|
|
}
|
|
|
|
//用户类型
|
|
public enum OperateType
|
|
{
|
|
revise,//修改
|
|
add,//新增
|
|
}
|
|
|
|
|
|
//学员学习状态
|
|
public enum LearnState
|
|
{
|
|
//等待状态
|
|
waiting=0,
|
|
//学习状态
|
|
learning=1,
|
|
//考核状态
|
|
examing=2,
|
|
}
|
|
|
|
|
|
|
|
//学员学习状态显示文本
|
|
public enum LearnStateText
|
|
{
|
|
//等待状态
|
|
未下发科目 = 0,
|
|
//学习状态
|
|
训练中 = 1,
|
|
//考核状态
|
|
考核中 = 2,
|
|
}
|
|
|
|
//在线学员
|
|
public class OnlineStudent
|
|
{
|
|
public string ip;
|
|
public string user;
|
|
public LearnState state;
|
|
public string subName;//当前科目
|
|
public NetSubStage subStage;
|
|
public int groupNumber=-1;
|
|
public bool isMaster=false;
|
|
}
|
|
|
|
//图标类型
|
|
public enum IconType
|
|
{
|
|
//装备编辑图标
|
|
equipEditor,
|
|
//人员编辑图标
|
|
personnelEditor,
|
|
|
|
//突发事件编辑图标
|
|
accidentEditor,
|
|
|
|
//突发事件地图实例图标
|
|
accidentInstance,
|
|
|
|
//厂区标记图标
|
|
areaFlage,
|
|
}
|
|
|
|
//教员端选择装备库图标数据
|
|
[Serializable]
|
|
public class EquipIconData
|
|
{
|
|
public string name;
|
|
public float speed;
|
|
public int count;
|
|
public bool isOn;
|
|
public EquipIconData()
|
|
{
|
|
|
|
}
|
|
|
|
public EquipIconData(string Name,float Speed,int Count, bool IsOn)
|
|
{
|
|
name = Name;
|
|
speed = Speed;
|
|
count = Count;
|
|
isOn = IsOn;
|
|
}
|
|
}
|
|
|
|
//放置在地图上的行军车辆数据 显示车载物体时使用
|
|
[Serializable]
|
|
public class OnMapCarData
|
|
{
|
|
public string name;
|
|
//public Vector2 anchorPos;
|
|
public float aPX;
|
|
public float aPY;
|
|
public float angleZ;
|
|
public XDictionary<string, int> onboardPersonDic = new XDictionary<string, int>();//车载人员和对应数量
|
|
public XDictionary<string, int> onboardEquipDic = new XDictionary<string, int>();//车载装备和对应数量
|
|
|
|
public OnMapCarData()
|
|
{
|
|
|
|
}
|
|
|
|
public OnMapCarData(string nameStr, Vector2 anchor, float angle, XDictionary<string, int> personDic, XDictionary<string, int> equipDic)
|
|
{
|
|
name = nameStr;
|
|
aPX = anchor.x;
|
|
aPY = anchor.y;
|
|
angleZ = angle;
|
|
onboardPersonDic = personDic ;
|
|
onboardEquipDic = equipDic;
|
|
}
|
|
}
|
|
|
|
//设置的突发事件数据
|
|
[Serializable]
|
|
public class TuFaData
|
|
{
|
|
public TuFaEnum name;
|
|
public float posX;//
|
|
public float posY;//anchoredPos
|
|
public int ID;//突发事件ID 用于区分突发事件
|
|
public TuFaData()
|
|
{
|
|
|
|
}
|
|
public TuFaData(TuFaEnum nameStr, Vector2 anchorPos)
|
|
{
|
|
name = nameStr;
|
|
posX = anchorPos.x;
|
|
posY = anchorPos.y;
|
|
}
|
|
}
|
|
[Serializable]
|
|
public enum TuFaEnum
|
|
{
|
|
敌机侦察,
|
|
敌机打击,
|
|
化学沾染地带,
|
|
越过染毒地带,
|
|
小股敌人袭扰,
|
|
道路阻断,
|
|
友邻装备轻度损伤,
|
|
友邻装备重度损伤,
|
|
}
|
|
|
|
/// <summary>
|
|
/// 编队分组
|
|
/// </summary>
|
|
public enum FormationGroupingEnum
|
|
{
|
|
//不连贯训练时默认为该分组
|
|
前进保障队,
|
|
|
|
|
|
指挥组,
|
|
前出保障组,
|
|
抢救抢修队,
|
|
主体编队,
|
|
殿后保障组,
|
|
}
|
|
|
|
|
|
|
|
//科目想定基类
|
|
[Serializable]
|
|
public class RecordBase
|
|
{
|
|
public NetSubNameEnum subName;
|
|
public RecordBase()
|
|
{
|
|
}
|
|
//选用地形
|
|
public string TerrainName;
|
|
//想定介绍
|
|
public string fileIntr;
|
|
//任务介绍
|
|
public string taskIntr;
|
|
}
|
|
|
|
//科目1想定记录数据类
|
|
[Serializable]
|
|
public class SubRecordClass:RecordBase
|
|
{
|
|
public SubRecordClass()
|
|
{
|
|
subName = NetSubNameEnum.编队行军;
|
|
}
|
|
//可选用设备
|
|
public List<EquipIconData> usedEquips = new List<EquipIconData>();
|
|
//可选用人员
|
|
public List<string> usedPersons=new List<string>();
|
|
//设置的突发事件
|
|
public List<TuFaData> tuFaDatas= new List<TuFaData>();
|
|
}
|
|
[Serializable]
|
|
public class Sub2RecordClass : RecordBase
|
|
{
|
|
public Sub2RecordClass()
|
|
{
|
|
subName = NetSubNameEnum.修理所展开;
|
|
}
|
|
[System.Xml.Serialization.XmlElementAttribute("OnMapCarData")]
|
|
public List<OnMapCarData> onMapCars = new List<OnMapCarData>();
|
|
|
|
}
|
|
|
|
//教员编辑界面初始化数据
|
|
public class EditorPanelInitData
|
|
{
|
|
public string filePath;//文件路径 用于存储时覆盖原有文件
|
|
public RecordBase recordBase; //
|
|
}
|
|
|
|
//创建的类型
|
|
public enum CreaterType
|
|
{
|
|
car,
|
|
childEquip,
|
|
person,
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public enum ABType
|
|
{
|
|
装备=1,
|
|
工具=2,
|
|
地形=3,
|
|
天候=4,
|
|
}
|
|
|
|
public class AssetBundleMsg
|
|
{
|
|
public string assetsName;
|
|
public ABType type;
|
|
public string filePath;
|
|
//搭载装备
|
|
public string parentName;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 允许摆放区域的相关参数
|
|
/// </summary>
|
|
[Serializable]
|
|
public struct PermissibleArea
|
|
{
|
|
public Vector3 areaWorldPostion;
|
|
public Vector2 areaSize;
|
|
public float angle;
|
|
}
|
|
|
|
//想定文件存储和再次加载初始化车辆图标信息
|
|
public class CarIconIntacneInitData
|
|
{
|
|
public string setInTargetImage;//应当放置在其他物体名称
|
|
public int angle;
|
|
public XDictionary<string, int> onboardPersonDic = new XDictionary<string, int>();//车载人员和对应数量
|
|
public XDictionary<string, int> onboardEquipDic = new XDictionary<string, int>();//车载装备和对应数量
|
|
}
|
|
|
|
|
|
|
|
//待创建的车辆信息
|
|
public class CarData
|
|
{
|
|
public IconBase icon;// 对应的UI图标 可用于更新图标
|
|
public CarPosType carType;
|
|
public string carName;
|
|
public Vector3 postion;
|
|
public Vector3 rotation;
|
|
public float Speed;
|
|
public float stopDistance = 100f;//行军时与前车默认间距
|
|
public string onboardEquip;//车载装备名称
|
|
}
|
|
|
|
//突发问题相关
|
|
public static class TuFaAnswers
|
|
{
|
|
public static Dictionary<TuFaEnum, TuFaAnswerClass> tufaEvents = new Dictionary<TuFaEnum, TuFaAnswerClass>() {
|
|
{TuFaEnum.敌机侦察, new TuFaAnswerClass( new Dictionary<string, int>(){ { "继续行军", -15 },{ "直接停车", -10},{ "利用地物隐蔽",-1 },{ "下车攻击", -20 }},"利用地物隐蔽") } ,
|
|
{TuFaEnum.友邻装备轻度损伤, new TuFaAnswerClass(new Dictionary<string, int>(){ { "继续行军", -10 },{ "排除应急抢修组支援修理", 0} ,{ "组织后送", -15} },"排除应急抢修组支援修理") } ,
|
|
{TuFaEnum.友邻装备重度损伤, new TuFaAnswerClass(new Dictionary<string, int>(){{ "继续行军", -10 },{ "排除应急抢修组支援修理", -15} ,{ "组织后送", 0} },"组织后送") } ,
|
|
{TuFaEnum.小股敌人袭扰, new TuFaAnswerClass(new Dictionary<string, int>(){ { "直接后下车隐蔽",-10 },{ "加速通过,报告上级", -15} ,{ "停车侦察后追击歼灭", 0} },"停车侦察后追击歼灭") } ,
|
|
{TuFaEnum.化学沾染地带, new TuFaAnswerClass(new Dictionary<string, int>(){ { "提高车速通过", -10 },{ "匀速通过,收三口", 5} ,{ "提高车速同时收三口(袖口 领口 裤口)", 0} ,{ "匀速通过", -20} },"提高车速同时收三口(袖口 领口 裤口)") } ,
|
|
{TuFaEnum.敌机打击, new TuFaAnswerClass( new Dictionary<string, int>(){ { "继续行军", -10 },{ "停车后集中还击", -20} ,{ "停车后分散还击", -5},{ "拉大车距行军", -4}},"拉大车距行军") } ,
|
|
{TuFaEnum.越过染毒地带, new TuFaAnswerClass( new Dictionary<string, int>(){ { "匀速行军", -10 },{ "停车进行人员洗消", -5},{ "停车进行人装洗消", 12} },"停车进行人装洗消") } ,
|
|
{TuFaEnum.道路阻断, new TuFaAnswerClass(new Dictionary<string, int>(){ { "报告后停车待命", -10 },{ "冒险前进", -15},{ "组织抢救车土工作业后继续前进", 0} },"组织抢救车土工作业后继续前进") } ,
|
|
};
|
|
}
|
|
|
|
public class TuFaAnswerClass
|
|
{
|
|
public Dictionary<string,int> options = new Dictionary<string, int>(); //选项即选项对应的耗时
|
|
public string rightOption;//最佳选项
|
|
|
|
public TuFaAnswerClass(Dictionary<string,int> options,string rightOption)
|
|
{
|
|
this.options = options;
|
|
this.rightOption = rightOption;
|
|
}
|
|
}
|
|
|
|
////记录所有的厂区名称 用于UI初始化
|
|
//public static class AreaName
|
|
//{
|
|
// public static List<string> areaNames = new List<string>() { "指控区","油料场", "器材存放场", "弹药场", "修竣装备停放场", "修理场", "待修装备停放场", "洗消场", "待后送装备停放场", "接收场" };
|
|
//}
|
|
|
|
//确定厂区唯一名称
|
|
public enum AreaNameEnum
|
|
{
|
|
指控区,
|
|
油料场,
|
|
器材存放场,
|
|
弹药场,
|
|
修竣装备停放场,
|
|
修理场,
|
|
待修装备停放场,
|
|
洗消场,
|
|
待后送装备停放场,
|
|
接收场,
|
|
}
|
|
|
|
//成绩更新面板数据类
|
|
public class ResultMsgToUI
|
|
{
|
|
public string ip;
|
|
public NetAnswerSheet resultMsg;
|
|
|
|
public ResultMsgToUI()
|
|
{
|
|
|
|
}
|
|
|
|
public ResultMsgToUI(string ip, NetAnswerSheet netResult)
|
|
{
|
|
this.ip = ip;
|
|
this.resultMsg = netResult;
|
|
}
|
|
}
|
|
|
|
public static class OnboardPerson
|
|
{
|
|
public static Dictionary<string, XDictionary<string, int>> personDic = new Dictionary<string, XDictionary<string, int>>()
|
|
{
|
|
{ "NY033H型轮式轻型防化分队指挥车",new XDictionary<string, int>(){ { "连长",1},{ "指导员",1},{ "副连长",1 }, { "装甲技师", 1 } } },
|
|
{ "ZJQ84Q式中型坦克抢救车",new XDictionary<string, int>(){ { "抢救工", 2},{ "起重工", 1},{ "装甲底盘修理工", 1 }, { "电气修理工", 1 } } },
|
|
{ "96A坦克抢救车",new XDictionary<string, int>(){ { "抢救工", 2},{ "装甲底盘修理工", 1},{ "电气修理工", 1 } } },
|
|
{ "VME104履带装甲抢修车",new XDictionary<string, int>(){ { "抢救工", 2},{ "火炮修理工", 1},{ "装甲底盘修理工", 1 }, { "火控修理工", 1 }, { "通信修理工", 1 } } },
|
|
{ "VMG101履带装甲补给车",new XDictionary<string, int>(){ { "抢救工", 2},{ "装甲底盘修理工", 1 } } },
|
|
{ "CXZ411型装甲能源工程车",new XDictionary<string, int>(){ { "电气修理工", 2},{ "车辆综合电子系统修理工", 3} } },
|
|
{ "CXZ511型装甲保养工程车",new XDictionary<string, int>(){ { "液压修理工", 1},{ "装甲底盘修理工", 3} } },
|
|
{ "徐工QY25K型汽车起重机",new XDictionary<string, int>(){ { "起重工", 1} } },
|
|
{ "VME301-5型轮式装备抢救车",new XDictionary<string, int>(){ { "抢救工", 1},{ "汽车修理工", 2} } },
|
|
{ "CXC022汽车保养车",new XDictionary<string, int>(){ { "汽车修理工", 3} } },
|
|
{ "VME105履带装甲抢修车",new XDictionary<string, int>(){ { "抢救工", 2} } },
|
|
{ "徐工QY16K型汽车起重机",new XDictionary<string, int>(){ { "起重工", 2} } },
|
|
{ "CXZ311型装甲拆装工程车",new XDictionary<string, int>(){ { "液压修理工", 1},{ "装甲底盘修理工", 3} } },
|
|
{ "CXZ511型装甲保养工程车",new XDictionary<string, int>(){ { "液压修理工", 1},{ "装甲底盘修理工", 3 } } },
|
|
{ "CXC012汽车修理工程车",new XDictionary<string, int>(){ { "汽车修理工", 3},{ "电气修理工", 1} } },
|
|
|
|
};//车辆应该具备的标注车载人员
|
|
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 导调界面初始化类
|
|
/// </summary>
|
|
public class AdjustingPanelInitData
|
|
{
|
|
public string user;
|
|
public string ip;
|
|
public NetAdjustingInitData initData;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 分组协同训练 全局数据记录类
|
|
/// </summary>
|
|
public static class GroupLearnHelper
|
|
{
|
|
|
|
public static int groupNumber;
|
|
/// <summary>
|
|
/// 是否分组训练
|
|
/// </summary>
|
|
public static bool isGroup;
|
|
|
|
/// <summary>
|
|
/// 是否组长
|
|
/// </summary>
|
|
public static bool isMaster;
|
|
|
|
/// <summary>
|
|
/// 其他组员
|
|
/// </summary>
|
|
public static List<SyncUser> otherUser;
|
|
|
|
static NetLearnGroup netLearn;
|
|
|
|
/// <summary>
|
|
/// 接到科目信息时 注入并分析分组状态
|
|
/// </summary>
|
|
public static NetLearnGroup GroupLearn
|
|
{
|
|
set
|
|
{
|
|
netLearn = value;
|
|
if (netLearn != null && netLearn.allStudents.Count > 1)
|
|
{
|
|
isGroup = true;
|
|
isMaster = ThisIP == netLearn.masterIP;
|
|
groupNumber = netLearn.groupNumber;
|
|
netLearn.allStudents.Remove(ArrayHelper.Find<SyncUser>(netLearn.allStudents.ToArray(), (p) => p.ip == thisIP));//移除代表自己的user
|
|
otherUser = netLearn.allStudents;
|
|
}
|
|
else
|
|
{
|
|
isGroup = false;
|
|
isMaster = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static string thisIP;
|
|
/// <summary>
|
|
/// 获取本机IP
|
|
/// </summary>
|
|
public static string ThisIP {
|
|
get
|
|
{
|
|
if (string.IsNullOrEmpty(thisIP))
|
|
thisIP = ETModel.NetHelper.GetAddressIPV4();
|
|
return thisIP;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class StepName
|
|
{
|
|
public static Dictionary<string, string> StepNameDic = new Dictionary<string, string>() {
|
|
{"V型卡箍","排气系统车内排烟管和车外消音器连接的V型卡箍螺栓" },
|
|
{"车轮","" },
|
|
{"燃油回油管快接","发动机燃油回油管快速接头" },
|
|
{"拆卸开始节点","" },
|
|
{"椅底盖板","驾驶椅底部盖板" },
|
|
{"软轴卡板螺栓组","" },
|
|
{"吊装盖板锁扣组","" },
|
|
{"舱后隔板B锁扣组","" },
|
|
{"动力装置螺栓6","一体化动力装置右侧后方与车体连接的1个螺栓" },
|
|
{"动力装置螺栓5","右前轮处一体化动力装置与车体连接的1个螺栓" },
|
|
{"右前轮窗口盖","车体右前轮舱上窗口盖" },
|
|
{"右前轮窗口盖螺栓组","" },
|
|
{"发电机电控执行器插头","发动机电控装置电控执行器电缆插头" },
|
|
{"采集控制信号插头","动力舱采集控制信号电缆插头" },
|
|
{"档控螺栓组A","变速操纵装置控制盒上侧的3个螺栓" },
|
|
{"软轴卡板","钢丝绳软轴固定卡板" },
|
|
{"加温器回水管","冷却系统加温器回水管快速接头" },
|
|
{"加温器进水管快接","冷却系统加温器进水管快速机头" },
|
|
{"变速和离合操纵气管接头","附属用气系统变速器高低档气管和离合器气缸操纵气管接头" },
|
|
{"附属用气压机出气套","附属用气系统空气压缩机出气管卡套" },
|
|
{"排气制动缸螺套","制动系统排气制动缸气管固定螺套" },
|
|
{"转助泵回油快接","转向系统转向助力泵回油管快速接头" },
|
|
{"转助泵进油快接","转向系统转向助力泵进油管快速接头" },
|
|
{"传动轴螺栓组","变速器输出轴与分动器连接的四颗螺栓" },
|
|
{"动力装置螺栓1","一体化动力装置左侧后方与车体连接的1个螺栓" },
|
|
{"分动器回油管快接","分动器回油管快速接头" },
|
|
{"分动器进油快接","分动器进油管快速接头" },
|
|
{"变量泵控制油管快接","水上液压传动系统变量泵控制油管快速接头" },
|
|
{"变量泵泄油管快接","水上液压传动系统变量泵泄油管快速接头" },
|
|
{"变量泵回油管快接","水上液压传动系统变量泵回油管快速接头" },
|
|
{"变量泵吸油管螺栓组","水上液压传动系统变量泵吸油管4颗固定螺栓" },
|
|
{"舱后隔板B","动力舱后部隔板B" },
|
|
{"风定马达回油滤螺套","风扇液压传动系统定量马达与回油滤连接管的连接螺套" },
|
|
{"燃油供油管快接","发动机燃油供油管快速接头" },
|
|
{"驾舱隔板B锁扣组","" },
|
|
{"驾舱隔板A","驾驶舱隔板A" },
|
|
{"驾舱隔板B","驾驶舱隔板B" },
|
|
{"驾舱隔板A锁扣组","" },
|
|
{"横梁螺栓组","" },
|
|
{"变泵吸油快接","风扇液压传动系统变量泵吸油管快速接头" },
|
|
{"驾驶椅螺栓组","" },
|
|
{"档位控制器","变速操纵装置控制盒" },
|
|
{"离工与主快接","离合器工作缸与离合器主缸连接油管快速接头" },
|
|
{"百叶窗","百叶窗" },
|
|
{"散热器","散热器" },
|
|
{"动力装置","一体化动力装置吊装" },
|
|
{"舱后隔板处电缆组","动力舱后隔板下部电气装置5个电缆插头和中央充放气总线螺纹接头" },
|
|
{"三角木","" },
|
|
{"动力装置螺栓234组","一体化动力装置左侧前方与车体连接的3个螺栓" },
|
|
{"变泵泄油螺套","风扇液压传动系统温控阀回油管和变量泵泄油管的连接螺套" },
|
|
{"吊装盖板","吊装动力舱车体后部盖板" },
|
|
{"驾驶椅","驾驶椅" },
|
|
{"变泵高压快接","风扇液压传动系统变量泵吸高压油管快速接头" },
|
|
{"百叶窗锁扣组","" },
|
|
{"制动螺栓","驻车制动缸中心螺栓" },
|
|
{"舱后隔板A锁扣组","" },
|
|
{"档控螺栓组B","变速操纵装置控制盒左侧中部、下部4个螺栓" },
|
|
{"液传回油快接","风扇液压传动系统回油管快速接头" },
|
|
{"横梁","横梁" },
|
|
{"舱后隔板A","动力舱后部隔板A" },
|
|
{"千斤顶","" },
|
|
};
|
|
}
|
|
|
|
|
|
|