You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
879 lines
39 KiB
879 lines
39 KiB
3 years ago
|
using UnityEngine;
|
||
|
using System.IO;
|
||
|
using System;
|
||
|
using System.Xml.Serialization;
|
||
|
using AX.MessageSystem;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Collections;
|
||
|
using System.Linq;
|
||
|
|
||
|
namespace AX.TrackRecord
|
||
|
{
|
||
|
struct sss_
|
||
|
{
|
||
|
EventRecordItem_two h;// = new EventRecordItem_two();
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 轨迹记录加载类
|
||
|
/// </summary>
|
||
|
///
|
||
|
public class LoadManager : MonoBehaviour
|
||
|
{
|
||
|
public static LoadManager Instance;
|
||
|
[HideInInspector]
|
||
|
public Record_One_root record_Load = new Record_One_root();
|
||
|
[HideInInspector]
|
||
|
public bool IsPlayBacking = false;
|
||
|
[HideInInspector]
|
||
|
public int EventIndex = 0;
|
||
|
//public static RecordManager Instance = new RecordManager();
|
||
|
[HideInInspector]
|
||
|
public string filename = "filename2.xml";
|
||
|
public GameObject TheShowUI;
|
||
|
//[HideInInspector]
|
||
|
//public bool RecorControl = true;
|
||
|
[HideInInspector]
|
||
|
public float LoadTimer = 0; //时间累加
|
||
|
[HideInInspector]
|
||
|
public GameObject TheTime;
|
||
|
[HideInInspector]
|
||
|
public GameObject reload;
|
||
|
[HideInInspector]
|
||
|
public bool isChanged = false;
|
||
|
private GameObject oneClickCanle;
|
||
|
//[HideInInspector]
|
||
|
//public bool has = false;
|
||
|
[HideInInspector]
|
||
|
public bool IsPause = false;
|
||
|
private bool StartTimerFlag = false;
|
||
|
|
||
|
[HideInInspector]
|
||
|
public int LoadSpeed = 1;//快进速度
|
||
|
[HideInInspector]
|
||
|
public string FileName;
|
||
|
public bool RecordBtn = true;//点击按钮时候控制进度
|
||
|
private Transform RecordFather;//时间轴预设父物体
|
||
|
//private GameObject ADDTagBtn;//添加标签按钮
|
||
|
[HideInInspector]
|
||
|
public int index;
|
||
|
[HideInInspector]
|
||
|
public bool IsMakeScore = false;//打分时,播放结束,不隐藏时间轴,等待手动点击保存评分时关闭时间轴等
|
||
|
public event EventHandler PlayBackOverEvent;//回放完毕事件
|
||
|
public BuildType buildType = BuildType.TypeA;
|
||
|
|
||
|
public Dictionary<float, List<EventRecordItem_two>> eventListDic = new Dictionary<float, List<EventRecordItem_two>>();
|
||
|
public string Format = "F1";
|
||
|
|
||
|
public int speedFactor = 1;
|
||
|
|
||
|
void Awake()
|
||
|
{
|
||
|
if (Instance == null)
|
||
|
{
|
||
|
Instance = this;
|
||
|
}
|
||
|
RecordFather = GameObject.Find("Canvas").transform.Find("时间轴/father");
|
||
|
PlayBackOverEvent += PlayBackOverFunc;
|
||
|
MessageDispatcher.AddListener("ProcessSkipEvent", ProcessSkipEvent);
|
||
|
}
|
||
|
void Start()
|
||
|
{
|
||
|
}
|
||
|
void OnDestroy()
|
||
|
{
|
||
|
PlayBackOverEvent -= PlayBackOverFunc;
|
||
|
MessageDispatcher.RemoveListener("ProcessSkipEvent", ProcessSkipEvent);
|
||
|
AgentRecord.speedFactor = 1;
|
||
|
}
|
||
|
|
||
|
void FixedUpdate()
|
||
|
{
|
||
|
//开始按时间顺序回放记录
|
||
|
|
||
|
if (RecordBtn)
|
||
|
{
|
||
|
if (IsPlayBacking && !IsPause && StartTimerFlag)
|
||
|
{
|
||
|
LoadTimer += Time.deltaTime * LoadSpeed;
|
||
|
if (LoadTimer <= record_Load.SumTime)
|
||
|
{
|
||
|
eventListDic.ExecuteEventFromDict(LoadTimer, false);
|
||
|
}
|
||
|
else////////回放结束
|
||
|
{
|
||
|
PlayBackOver();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
private void PlayBackOver()
|
||
|
{
|
||
|
LoadSpeed = 1;
|
||
|
AgentRecord.speedFactor = 1;
|
||
|
PlayBackOverEvent(this, new PlayBackEventArgs(IsMakeScore));
|
||
|
MessageDispatcher.SendMessage("ShowToolbar", (object)this.name);
|
||
|
MessageDispatcher.SendMessage("CLOSE", (object)"杂物清理界面", "CUBE");
|
||
|
MessageDispatcher.SendMessage("CLOSE", (object)"自动评判", "CUBE");
|
||
|
MessageDispatcher.SendMessage("CLOSE", (object)"PoChaiUI", "CUBE");
|
||
|
MessageDispatcher.SendMessage("CLOSE", (object)"AddScoreTag", "CUBE");
|
||
|
|
||
|
}
|
||
|
private void ProcessSkipEvent(IMessage msg)
|
||
|
{
|
||
|
var time = (SkipEventAttri)msg.Data;
|
||
|
RecordBtn = false;
|
||
|
//if (time.to < time.from)//往回执行
|
||
|
//{
|
||
|
// LoadObjSetToOriginalTrans(record_Load);//重新加载物体
|
||
|
// eventListDic.ExecuteEvents(0, time.to);
|
||
|
//}
|
||
|
//else//继续往后执行
|
||
|
//{
|
||
|
// eventListDic.ExecuteEvents(time.from, time.to);
|
||
|
//}
|
||
|
LoadTimer = time.to + DictProcessHelpClass.threshold;
|
||
|
Time.timeScale = 1;
|
||
|
//StartCoroutine(SetLoadTimer(time.to));
|
||
|
//RecordBtn = true;
|
||
|
//if (Mathf.Approximately(time.to, record_Load.SumTime))
|
||
|
//{
|
||
|
// IsPause = false;
|
||
|
//}
|
||
|
}
|
||
|
|
||
|
IEnumerator SetLoadTimer(float timer)
|
||
|
{
|
||
|
yield return new WaitForSeconds((Frames + 1f) * Time.deltaTime);
|
||
|
LoadTimer = timer;
|
||
|
}
|
||
|
public void ExePlayBackOverEvent(bool IsMakeScore)
|
||
|
{
|
||
|
PlayBackOverFunc(this, new PlayBackEventArgs(IsMakeScore));
|
||
|
GameObject.Find("Canvas").transform.Find("时间轴").gameObject.SetActive(false);
|
||
|
}
|
||
|
public void ChangeIntro(EventRecordItem_two eventI, string intro)//修改简介方法
|
||
|
{
|
||
|
foreach (var item in record_Load.EventList)
|
||
|
{
|
||
|
if (item.Equals(eventI))
|
||
|
{
|
||
|
item.objAttriList[0].TaskName = intro;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
var key = DictProcessHelpClass.GetKeyFromTimer(eventI.timer);
|
||
|
if (eventListDic.ContainsKey(key))//key确定的查找
|
||
|
{
|
||
|
foreach (var item in eventListDic[key])
|
||
|
{
|
||
|
if (item.Equals(eventI))
|
||
|
{
|
||
|
item.objAttriList[0].TaskName = intro;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
public void ChangeBiaoQian(EventRecordItem_two eventI)//修改标签方法
|
||
|
{
|
||
|
foreach (var item in record_Load.EventList)
|
||
|
{
|
||
|
if (item.Equals(eventI))
|
||
|
{
|
||
|
item.objAttriList[0].TaskName = eventI.objAttriList[0].TaskName;
|
||
|
item.objAttriList[0].ObjName = eventI.objAttriList[0].ObjName;
|
||
|
item.objAttriList[0].VideoFile = eventI.objAttriList[0].VideoFile;
|
||
|
item.objAttriList[0].PictureFile = eventI.objAttriList[0].PictureFile;
|
||
|
item.objAttriList[0].modeadd = eventI.objAttriList[0].modeadd;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
var key = DictProcessHelpClass.GetKeyFromTimer(eventI.timer);
|
||
|
if (eventListDic.ContainsKey(key))//key确定的查找
|
||
|
{
|
||
|
foreach (var item in eventListDic[key])
|
||
|
{
|
||
|
if (item.Equals(eventI))
|
||
|
{
|
||
|
item.objAttriList[0].TaskName = eventI.objAttriList[0].TaskName;
|
||
|
item.objAttriList[0].ObjName = eventI.objAttriList[0].ObjName;
|
||
|
item.objAttriList[0].VideoFile = eventI.objAttriList[0].VideoFile;
|
||
|
item.objAttriList[0].PictureFile = eventI.objAttriList[0].PictureFile;
|
||
|
item.objAttriList[0].modeadd = eventI.objAttriList[0].modeadd;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
int AlterID;
|
||
|
float deltaTime_Lat = -0.2f;
|
||
|
|
||
|
|
||
|
private void PlayBackOverFunc(object sender, EventArgs e)
|
||
|
{
|
||
|
|
||
|
if (!((PlayBackEventArgs)e).IsMakeScore)
|
||
|
{
|
||
|
IsPlayBacking = false;
|
||
|
if (isChanged)
|
||
|
{
|
||
|
TrackRecordHelpClass.SerializeRecordToXML(ExamInfoHelpClass.CurrentWorkPath+NodeSet.Instance.RecordFileName, record_Load);
|
||
|
isChanged = false;
|
||
|
}
|
||
|
}
|
||
|
else//打分模式下
|
||
|
{
|
||
|
//重置状态,EventIndex=0,时间轴复位到原点,等待再次点击播放,以便添加记录
|
||
|
//ToDo...
|
||
|
LoadTimer = 0;
|
||
|
IsPlayBacking = true;
|
||
|
EventIndex = 0;
|
||
|
IsPause = true;//置于暂停状态,等待播放
|
||
|
//MakeSorceSet.instance.MakeSorceSetTime();//右下时间清零
|
||
|
TheBackView.instance.EndBtn.SetActive(false);
|
||
|
//TrackRecordHelpClass.LoadObjSetToOriginalTrans(record_Load);
|
||
|
}
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 获取Record_Load
|
||
|
/// </summary>
|
||
|
/// <param name="filename"></param>
|
||
|
|
||
|
public void GetRecord_Load(string filename)
|
||
|
{
|
||
|
FileName = filename;
|
||
|
if (RecordManager.Instance.IsRecording)
|
||
|
{
|
||
|
Debug.Log("Please Stop the record first!");
|
||
|
return;
|
||
|
}
|
||
|
record_Load = null;
|
||
|
//string filename_ = "recordList/" + ((int)ExamInfoHelpClass.selectSceneID).ToString() + "/" + filename;
|
||
|
record_Load = TrackRecordHelpClass.LoadRecord_DeserializeXMLToRecord(filename);
|
||
|
}
|
||
|
|
||
|
|
||
|
public void StartPlayBack(string filename)
|
||
|
{
|
||
|
//未停止记录前不能开始回放
|
||
|
|
||
|
FileName = filename;
|
||
|
if (RecordManager.Instance.IsRecording)
|
||
|
{
|
||
|
Debug.Log("Please Stop the record first!");
|
||
|
return;
|
||
|
}
|
||
|
record_Load = null;
|
||
|
//string filename_ = "recordList/" + ((int)ExamInfoHelpClass.selectSceneID).ToString() + "/" + filename;
|
||
|
record_Load = TrackRecordHelpClass.LoadRecord_DeserializeXMLToRecord(filename);
|
||
|
|
||
|
if (record_Load != null)
|
||
|
{
|
||
|
MessageDispatcher.SendMessage("CloseToolbar", (object)this.name);
|
||
|
MessageDispatcher.SendMessage("ResettingButton", (object)this.name);
|
||
|
MessageDispatcher.SendMessage("RESET_OILTANKDISASTER_ATRRI", (object)"All");//重置罐体属性
|
||
|
MessageDispatcher.SendMessage("ResetTheScene");
|
||
|
MessageDispatcher.SendMessage("ShuiPaoMessage");
|
||
|
//GameObject.Find("Main Camera").GetComponent<Stopwatch>().enabled = false;
|
||
|
//GameObject.Find("Main Camera").GetComponent<Stopwatch>().Reset();
|
||
|
//Debug.Log(record_Load.EventList[0].eventType + "to" + record_Load.EventList[0].Navto);
|
||
|
//BackView.gameObject.SetActive(true);
|
||
|
AgentRecord.speedFactor = 1;
|
||
|
LoadTimer = 0;
|
||
|
IsPlayBacking = true;
|
||
|
EventIndex = 0;
|
||
|
IsPause = false;
|
||
|
StartTimerFlag = false;//在加载完初始物体前禁用计时标志,加载完成后再开始计时,避免错过。
|
||
|
TheBackView.instance.BoFang();
|
||
|
|
||
|
LoadObjSetToOriginalTrans(record_Load);
|
||
|
//TrackRecordHelpClass.LoadObjSetToOriginalTrans(record_Load);
|
||
|
|
||
|
eventListDic.GetDicFromEventList(record_Load.EventList);//首先获取字典
|
||
|
TheBackView.instance.CheckCount();//遍历字典生成标签
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
private IEnumerator ILoadObjSetToOriginalTrans(Record_One_root record_Load)
|
||
|
{
|
||
|
yield return null;
|
||
|
TrackRecordHelpClass.LoadObjSetToOriginalTrans(record_Load);
|
||
|
|
||
|
//加载完初始物体开始计时顺次执行事件
|
||
|
StartTimerFlag = true;
|
||
|
}
|
||
|
|
||
|
public void LoadObjSetToOriginalTrans(Record_One_root record_Load)
|
||
|
{
|
||
|
MessageDispatcher.SendMessage("DestroyObj", (object)"All");
|
||
|
StartCoroutine(ILoadObjSetToOriginalTrans(record_Load));
|
||
|
}
|
||
|
|
||
|
public void LoadObjSetToOriginalTransTag()
|
||
|
{
|
||
|
|
||
|
var eventItems = eventListDic[eventListDic.Keys.Last()];
|
||
|
var eventItem = eventItems[0];
|
||
|
foreach (EventRecordItem_two item in eventItems)
|
||
|
{
|
||
|
if (item.eventType == eventTypeRecord.None)
|
||
|
{
|
||
|
eventItem = item;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
StartCoroutine(LoadObjSetToOriginalTransTag(eventItem/*record_Load.EventList[record_Load.EventList.Count - 1]*/));
|
||
|
}
|
||
|
private IEnumerator LoadObjSetToOriginalTransTag(EventRecordItem_two eventAttri)
|
||
|
{
|
||
|
MessageDispatcher.SendMessage("DestroyObj", (object)"All");
|
||
|
MessageDispatcher.SendMessage("RESET_OILTANKDISASTER_ATRRI", (object)"All");//重置所有
|
||
|
|
||
|
MessageDispatcher.SendMessage("ShuiPaoMessage");
|
||
|
InputManager.Instance_.characters.Clear();
|
||
|
yield return null;
|
||
|
TrackRecordHelpClass.LoadObjSetToOriginalTransTag(eventAttri);
|
||
|
}
|
||
|
public void SubmitScore(string filename)
|
||
|
{
|
||
|
//评分结束,停止回放,保存为Xml文件
|
||
|
TrackRecordHelpClass.SerializeRecordToXML(filename, record_Load);
|
||
|
|
||
|
}
|
||
|
|
||
|
public void AddLoadTagEvent(string name_, string intro_,string show, GameObject game, float Time, ModelADD modle, string VideoPath, string PicturePath)
|
||
|
{
|
||
|
|
||
|
EventRecordItem_two EventAttribute = new EventRecordItem_two();
|
||
|
|
||
|
EventAttribute.eventType = eventTypeRecord.AddLoadTag;
|
||
|
|
||
|
RecordManager.Instance.RecordBasicEventAttri(ref EventAttribute);
|
||
|
ObjAttribute objAttri = new ObjAttribute();
|
||
|
|
||
|
objAttri.ObjName = name_;//记录Tag名称
|
||
|
objAttri.TaskName = intro_;//记录Tag简介
|
||
|
objAttri.TopName = show;
|
||
|
|
||
|
objAttri.modeadd = modle;//判断是什么模式 图片或者视频
|
||
|
objAttri.VideoFile = VideoPath;
|
||
|
objAttri.PictureFile = PicturePath;
|
||
|
|
||
|
if (Time > 0 && ExamInfoHelpClass.applicationMode == ExamInfoHelpClass.ApplicationMode.PATHFINDING)
|
||
|
{
|
||
|
EventAttribute.timer = Time + 0.5f;
|
||
|
if (game.name.Equals("zidong_ZJ"))
|
||
|
{
|
||
|
EventAttribute.eventType = eventTypeRecord.ZongJiePingPanTag; //总结自动评判
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
EventAttribute.eventType = eventTypeRecord.AddGpcAUTOTag;//高喷车自动评判
|
||
|
}
|
||
|
EventAttribute.PingPan = true;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
CameraAttribute camAttribute = MouseFollowRotation.Instance.CameraAttri;
|
||
|
|
||
|
EventAttribute.orthographic = Camera.main.orthographic;//使用pingpan字段来记录相机顶视图Flag
|
||
|
EventAttribute.size = Camera.main.orthographicSize;//使用size字段来记录相机顶视图orthographicSize
|
||
|
EventAttribute.camAttributeList.Add(camAttribute);
|
||
|
EventAttribute.objAttriList.Add(objAttri);
|
||
|
|
||
|
TrackRecordHelpClass.RecordAboutTag(ref EventAttribute);
|
||
|
|
||
|
AddToLoadEventList(EventAttribute, game);
|
||
|
game.GetComponent<GetTheJieDian>().EventItem = EventAttribute;////////////////
|
||
|
EventIndex++;//待测试是否有必要
|
||
|
|
||
|
IsPause = false;//添加标签完毕,继续开始计时
|
||
|
}
|
||
|
|
||
|
private void AddToLoadEventList(EventRecordItem_two eventItem, GameObject Game)
|
||
|
{
|
||
|
//index = 0;
|
||
|
//int id = 0;
|
||
|
//float min = 100000;
|
||
|
|
||
|
//for (int i = record_Load.EventList.Count - 1; i >= 0; i--)
|
||
|
//{
|
||
|
// float delta = record_Load.EventList[i].timer - eventItem.timer;
|
||
|
// float deltaAbs = Mathf.Abs(delta);
|
||
|
// if (deltaAbs < min)
|
||
|
// {
|
||
|
// if (delta > 0)
|
||
|
// {
|
||
|
// id = i;
|
||
|
// }
|
||
|
// else
|
||
|
// {
|
||
|
// id = i + 1;
|
||
|
// }
|
||
|
// min = deltaAbs;
|
||
|
// index = i;
|
||
|
// }
|
||
|
//}
|
||
|
|
||
|
//foreach (Transform child in RecordFather)
|
||
|
//{
|
||
|
// int Id = child.GetComponent<GetTheJieDian>().ID;
|
||
|
// if (Id >= id)
|
||
|
// {
|
||
|
// child.GetComponent<GetTheJieDian>().ID = Id + 1;
|
||
|
// }
|
||
|
//}
|
||
|
//Game.GetComponent<GetTheJieDian>().ID = id;
|
||
|
//Game.GetComponent<GetTheJieDian>().Timer = LoadTimer;
|
||
|
record_Load.EventList.Add(eventItem);
|
||
|
eventListDic.AddEventToDict(eventItem);
|
||
|
eventListDic.DictSort();
|
||
|
}
|
||
|
|
||
|
private int Frames = 0;
|
||
|
private int Frames_Count = 0;
|
||
|
GameObject Car;
|
||
|
public void SetFrames(float multiple)//multiple代表需要快进的倍数
|
||
|
{
|
||
|
Frames = 0;
|
||
|
Frames_Count = 0;
|
||
|
TheBackView.instance.ExeSpeedChangeEvent((int)multiple + 1);//倍速播放
|
||
|
}
|
||
|
public void ExecuteEventFromDict(float key, bool flag)
|
||
|
{
|
||
|
Frames++;
|
||
|
Frames_Count++;
|
||
|
Debug.Log("Frames++" + Frames+ " LoadTimer:" + LoadTimer);
|
||
|
StartCoroutine(ExecuteEventFromDict_Coroutine(key, flag));
|
||
|
}
|
||
|
|
||
|
private IEnumerator ExecuteEventFromDict_Coroutine(float key, bool flag)
|
||
|
{
|
||
|
yield return null;
|
||
|
eventListDic.ExecuteEventFromDict(key, true);
|
||
|
Frames_Count--;
|
||
|
Debug.Log("Frames_Count++" + Frames_Count + " LoadTimer:" + LoadTimer);
|
||
|
if (Frames_Count == 0)//
|
||
|
{
|
||
|
AgentRecord.speedFactor = 1;
|
||
|
Debug.Log("execute events over!Sum of events:"+ Frames);
|
||
|
//TheBackView.instance.ExeSpeedChangeEvent(LoadSpeed);//恢复播放速度
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// 回放一件事
|
||
|
/// </summary>
|
||
|
public void ExcuteEventFromRecord(EventRecordItem_two eventItem, bool IsShowTiShi)
|
||
|
{
|
||
|
|
||
|
//TheBackView.instance.BackApect(EventIndex);(停用)
|
||
|
switch (eventItem.eventType)
|
||
|
{
|
||
|
case eventTypeRecord.None:
|
||
|
if (eventItem.camAttributeList.Count != 0)
|
||
|
{
|
||
|
MouseFollowRotation.Instance.CameraAttri = eventItem.camAttributeList[0];
|
||
|
}
|
||
|
break;
|
||
|
case eventTypeRecord.Instantiate:
|
||
|
string pName = TrackRecordHelpClass.GetParentName(eventItem.objAttriList[0].ObjName);
|
||
|
MessageDispatcher.SendMessage(pName, "LoadInstantiateEvent", eventItem.objAttriList[0]);//触发实例化事件,发送一个EventRecordItem_two类型数据,会不会很耗费资源,有待测试改进
|
||
|
//GetTheJieDian.lock_ = false;
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.TaskChange:
|
||
|
MessageDispatcher.SendMessage("LoadTaskChangeEvent", eventItem);
|
||
|
//TheBackView.instance.BackApect(eventItem);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.TopNameChange:
|
||
|
MessageDispatcher.SendMessage("LoadTopNameChangeEvent", eventItem);
|
||
|
//TheBackView.instance.BackApect(eventItem);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.PathFinding:
|
||
|
MessageDispatcher.SendMessage("LoadPathFindingEvent", eventItem);
|
||
|
break;
|
||
|
case eventTypeRecord.TriggerEvent:
|
||
|
var triggerType = eventItem.CreatName;
|
||
|
switch (triggerType)
|
||
|
{
|
||
|
case "UpAndDownAttack":
|
||
|
//Debug.Log("bbbbbbbb:" + eventItem.TheFloor);//TheFoor为-1时,表示记录开始时透明主体已经被显示出来了
|
||
|
//if (eventItem.TheFloor == -1)
|
||
|
//{
|
||
|
// GameObject.Find("SceneAll").transform.Find("toumingzhuti").gameObject.SetActive(true);
|
||
|
//}
|
||
|
StartCoroutine(delayActive());
|
||
|
break;
|
||
|
case "MoveUpFloor":
|
||
|
int cengID = eventItem.TheFloor;
|
||
|
MessageDispatcher.SendMessage("MoveUpFloor", (object)cengID);
|
||
|
break;
|
||
|
case "MoveDownFloor":
|
||
|
MessageDispatcher.SendMessage("MoveDownFloor", (object)"");
|
||
|
break;
|
||
|
case "NameControl":
|
||
|
PrePareModeSet.instance.TheShowText.text = eventItem.PingPan ? "显示名称" : "隐藏名称";
|
||
|
PrePareModeSet.instance.TheHideNameWay(eventItem.PingPan);
|
||
|
break;
|
||
|
case "DoubleClick":
|
||
|
SubwayControl.Instance.SetTop(eventItem.PingPan);//
|
||
|
break;
|
||
|
case "ShowHideSmoke":
|
||
|
SubwayControl.Instance.SetSmoke(eventItem.PingPan);//ShowHideSmoke
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.MaskChange:
|
||
|
MessageDispatcher.SendMessage("LOADMASKCHANGEEVENT", eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.ChangeTextMesh:
|
||
|
MessageDispatcher.SendMessage("LoadTextMesh", eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.RescueWounded:
|
||
|
YingjiuRenYuan.Instance.PlayVideo(eventItem.CreatName);//营救伤员:CreatName,伤员名
|
||
|
break;
|
||
|
case eventTypeRecord.EditGCSEvent:
|
||
|
MessageDispatcher.SendMessage("LoadEditGCSEvent", eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.Delete://使用TaskName字段记录的父物体名
|
||
|
//MessageDispatcher.SendMessage(eventItem.objAttriList[0].TaskName, "DestroyObj", (object)eventItem.objAttriList[0].ObjName);
|
||
|
//该处直接删除物体,不调用DestroyObj事件,避免与其他情况冲突而不执行删除
|
||
|
var parent = GameObject.Find(eventItem.objAttriList[0].TaskName).transform;
|
||
|
foreach (Transform child in parent)
|
||
|
{
|
||
|
if (child.name == eventItem.objAttriList[0].ObjName)
|
||
|
{
|
||
|
if (child.name.Contains("rline") && LoadManager.Instance.IsPlayBacking)
|
||
|
{
|
||
|
|
||
|
Car=null;
|
||
|
if (child.GetComponent<GuanXianIDScript>().GuanXianList.Count > 1)
|
||
|
{
|
||
|
if (child.GetComponent<GuanXianIDScript>().End.name.Contains("pmc"))
|
||
|
{
|
||
|
Car = child.GetComponent<GuanXianIDScript>().End;
|
||
|
}
|
||
|
else if (child.GetComponent<GuanXianIDScript>().End.name.Contains("sgc"))
|
||
|
{
|
||
|
Car = child.GetComponent<GuanXianIDScript>().End;
|
||
|
}
|
||
|
else if (child.GetComponent<GuanXianIDScript>().Begin.name.Contains("pmc"))
|
||
|
{
|
||
|
Car = child.GetComponent<GuanXianIDScript>().Begin;
|
||
|
}
|
||
|
else if (child.GetComponent<GuanXianIDScript>().Begin.name.Contains("sgc"))
|
||
|
{
|
||
|
Car = child.GetComponent<GuanXianIDScript>().Begin;
|
||
|
}
|
||
|
MessageDispatcher.SendMessage(child.name, "CheckConnectCar", Car);
|
||
|
}
|
||
|
child.GetComponent<GuanXianIDScript>().DeletGuanXian();
|
||
|
}
|
||
|
if (child.name.Contains("xiaofangche") && LoadManager.Instance.IsPlayBacking)
|
||
|
{
|
||
|
MessageDispatcher.SendMessage("DeleteShuiYuan", child.gameObject);
|
||
|
}
|
||
|
if (InputManager.Instance_.characters.Contains(child.gameObject))
|
||
|
{
|
||
|
InputManager.Instance_.characters.Remove(child.gameObject);
|
||
|
}
|
||
|
if (InputManager.Instance_.GetSelectedCharacters().Contains(child.gameObject))
|
||
|
{
|
||
|
InputManager.Instance_.GetSelectedCharacters().Remove(child.gameObject);
|
||
|
}
|
||
|
//if(child.name.Contains("shangyuan") && child.GetComponent<WoundedControl>())//回放营救伤员视频
|
||
|
//{
|
||
|
// child.GetComponent<WoundedControl>().PlayVideo();
|
||
|
//}
|
||
|
|
||
|
Destroy(child.gameObject);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.ActiveWater:
|
||
|
MessageDispatcher.SendMessage(eventItem.objAttriList[0].ObjName, "LoadActiveWaterEvent", eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.StopWater:
|
||
|
MessageDispatcher.SendMessage("LoadStopWaterEvent", (object)eventItem.objAttriList[0].ObjName);
|
||
|
break;
|
||
|
case eventTypeRecord.ChangeJiJieQu:
|
||
|
MessageDispatcher.SendMessage("LoadJiJieSET", (object)eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.ChangeLineSize:
|
||
|
MessageDispatcher.SendMessage("LoadChangeLineSize", (object)eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.ChangeSmogAlpha:
|
||
|
MessageDispatcher.SendMessage("LoadSmogAlpha", (object)eventItem.objAttriList[0]);
|
||
|
|
||
|
break;
|
||
|
//case eventTypeRecord.GetOffCar:
|
||
|
// MessageDispatcher.SendMessage("LOADGETOFFCAR", (object)eventItem.objAttriList[0]);
|
||
|
// break;
|
||
|
case eventTypeRecord.ControlJuBi:
|
||
|
MessageDispatcher.SendMessage("LoadControlJuBiEvent", eventItem.objAttriList[0]);
|
||
|
//TheBackView.instance.BackApect(EventIndex);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.EditFire:
|
||
|
MessageDispatcher.SendMessage("LoadEditFireEvent", eventItem.objAttriList[0]);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.EditOilTankAttri:
|
||
|
MessageDispatcher.SendMessage("LOAD_EDITOILTANKATTRI_EVENT", eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.OilTankStartExplosion:
|
||
|
MessageDispatcher.SendMessage("LoadOilTankStartExplosionEventF", eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.ResetOilTank:
|
||
|
MessageDispatcher.SendMessage("LoadResetOilTankEvent", (object)eventItem.objAttriList[0].ObjName);
|
||
|
break;
|
||
|
case eventTypeRecord.OilTankTimer:
|
||
|
MessageDispatcher.SendMessage("LoadOilTankTimerEvent", eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.EditFluvio:
|
||
|
MessageDispatcher.SendMessage("LoadEditFluvioEvent", eventItem.objAttriList[0]);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.RecordStartPosOfLine:
|
||
|
//obj.GetComponent<XiaoFangYuanDrawLine>().GetTheLine(eventItem.Navto);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.LatiAttri:
|
||
|
MessageDispatcher.SendMessage("LoadControlLatiEvent", eventItem.objAttriList[0]);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.AddLineToXFY:
|
||
|
//MessageDispatcher.SendMessage("LoadAddLineToXFYEvent", eventItem.objAttriList[0]);
|
||
|
var lineName = eventItem.objAttriList[0].ObjName;
|
||
|
var XFY_XFC = eventItem.objAttriList[0].TaskName;
|
||
|
|
||
|
var begin = GameObject.Find(eventItem.objAttriList[0].TopName);
|
||
|
var end = GameObject.Find(eventItem.objAttriList[0].OtherAttri);
|
||
|
GameObject line = GameObject.Find(lineName) as GameObject;
|
||
|
if(line && GameObject.Find(XFY_XFC))
|
||
|
{
|
||
|
line.GetComponent<GuanXianIDScript>().GetTheMessage(begin, end);
|
||
|
//line.GetComponent<CengID>().cengID = eventItem.objAttriList[0].CengID;
|
||
|
//line.GetComponent<CengID>().CengIDBuildType = eventItem.objAttriList[0].buildTpye;
|
||
|
GameObject.Find(XFY_XFC).GetComponent<RLineControl>().LineList_GameObject.Add(line);
|
||
|
GameObject.Find(XFY_XFC).GetComponent<LineamentEvent>().isConnectCar = true;
|
||
|
|
||
|
CorrectLine(line);//矫正下管线
|
||
|
}
|
||
|
break;
|
||
|
case eventTypeRecord.StartPractice:
|
||
|
MessageDispatcher.SendMessage("LoadStartPracticeEvent");
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.FireStartSpread:
|
||
|
MessageDispatcher.SendMessage("LoadFireStartSpreadEvent", (object)eventItem.objAttriList[0].ObjName);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.ResetFire:
|
||
|
MessageDispatcher.SendMessage("LoadResetFireEvent", (object)eventItem.objAttriList[0].ObjName);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.StartAttack:
|
||
|
MessageDispatcher.SendMessage("LoadStartAttackEvent");
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.SwitchingFloor:
|
||
|
InputManager.Instance_.ClearSelectedCharacters();
|
||
|
if (eventItem.objAttriList.Count != 0)
|
||
|
{
|
||
|
for (int i = 0; i < eventItem.objAttriList[0].AllMembers.Count; i++)
|
||
|
{
|
||
|
var xiaofangyuan = GameObject.Find("pxiaofangyuan").transform.Find(eventItem.objAttriList[0].AllMembers[i]);
|
||
|
if (xiaofangyuan!=null)
|
||
|
InputManager.Instance_.addItem(xiaofangyuan.gameObject);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
MessageDispatcher.SendMessage(eventItem.BuildTYPE, "SELECTFLOOR_EVENT", (object)eventItem.TheFloor);
|
||
|
BuildItem build = new BuildItem();
|
||
|
build.buildType = eventItem.BuildTYPE;
|
||
|
build.floor = eventItem.TheFloor;
|
||
|
MessageDispatcher.SendMessage("ChangeFloor", build);
|
||
|
if (eventItem.camAttributeList.Count != 0)
|
||
|
{
|
||
|
MouseFollowRotation.Instance.CameraAttri = eventItem.camAttributeList[0];
|
||
|
}
|
||
|
break;
|
||
|
case eventTypeRecord.AddRecordTag://不用做什么处理
|
||
|
TheBackView.instance.BackApect(eventItem);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.AddFilterTag://不用做什么处理
|
||
|
TheBackView.instance.BackApect(eventItem);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.AddLoadTag://不用做什么处理
|
||
|
TheBackView.instance.BackApect(eventItem);
|
||
|
break;
|
||
|
case eventTypeRecord.AddGpcAUTOTag://不用做什么处理
|
||
|
if (ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.CheckScore ||
|
||
|
ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.MakeScore)
|
||
|
{
|
||
|
TheBackView.instance.BackApect(eventItem);
|
||
|
}
|
||
|
break;
|
||
|
//case eventTypeRecord.ZongJiePingPanTag:
|
||
|
// if (ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.CheckScore ||
|
||
|
// ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.MakeScore)
|
||
|
// {
|
||
|
// TheBackView.instance.BackApect(eventItem);
|
||
|
// }
|
||
|
//break;
|
||
|
case eventTypeRecord.FineTuning:
|
||
|
TheBackView.instance.BackApect(eventItem);
|
||
|
MessageDispatcher.SendMessage("LoadFineTuningEvent", eventItem.objAttriList[0]);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.RecordZhiJiaBack:
|
||
|
MessageDispatcher.SendMessage("LoadZhiJiaBack", (object)eventItem.objAttriList[0].ObjName);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.EditWeather:
|
||
|
MessageDispatcher.SendMessage("LoadEditWeatherEvent", eventItem.weatherAttriList[0]);
|
||
|
|
||
|
break;
|
||
|
case eventTypeRecord.EditInsiderUI:
|
||
|
MessageDispatcher.SendMessage("LoadEditInsiderEvent", eventItem.insderUIAttriList[0]);
|
||
|
break;
|
||
|
//case eventTypeRecord.CompleteAttack:
|
||
|
// obj.GetComponent<firedel>().GetDestroy();
|
||
|
// EventIndex++;
|
||
|
// break;
|
||
|
case eventTypeRecord.OpenEquipWin:
|
||
|
TrackRecordHelpClass.LoadOpenEquipWinEvent(eventItem);
|
||
|
break;
|
||
|
case eventTypeRecord.CloseEquipWin:
|
||
|
TrackRecordHelpClass.LoadCloseEquipWinEvent(eventItem);
|
||
|
break;
|
||
|
case eventTypeRecord.RecordQUYU:
|
||
|
TrackRecordHelpClass.LoadPolygonDian(eventItem);
|
||
|
break;
|
||
|
case eventTypeRecord.RecordPolygonThreeList:
|
||
|
TrackRecordHelpClass.LoadPolygonDianThreeList(eventItem);
|
||
|
break;
|
||
|
|
||
|
case eventTypeRecord.SubmitEquip:
|
||
|
TrackRecordHelpClass.LoadSubmitEquipEvent(eventItem.objAttriList[0]);
|
||
|
break;
|
||
|
case eventTypeRecord.OpenUI:
|
||
|
TrackRecordHelpClass.OpenUIEvent(eventItem,EventIndex);
|
||
|
break;
|
||
|
case eventTypeRecord.CloseUI:
|
||
|
TrackRecordHelpClass.CloseUIEvent(eventItem, EventIndex);
|
||
|
break;
|
||
|
case eventTypeRecord.EditZaWurUI:
|
||
|
TrackRecordHelpClass.EditZaWuEvent(eventItem);
|
||
|
break;
|
||
|
case eventTypeRecord.PoChaiUI:
|
||
|
break;
|
||
|
case eventTypeRecord.StairGo:
|
||
|
TrackRecordHelpClass.LoadGoStairEvent(eventItem);
|
||
|
break;
|
||
|
case eventTypeRecord.Y:
|
||
|
MessageDispatcher.SendMessage("Y",(object)eventItem.TheFloor);
|
||
|
break;
|
||
|
case eventTypeRecord.EseCameraPos:
|
||
|
if (MySceneManager.GetActiveScene().name.Equals("1") || MySceneManager.GetActiveScene().name.Equals("3"))//处理城市综合体超高层
|
||
|
{
|
||
|
if (GameObject.Find("YueTanShangSha"))
|
||
|
{
|
||
|
MouseFollowRotation.Instance.CameraAttri = eventItem.camAttributeList[0];
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
default: return;
|
||
|
|
||
|
}
|
||
|
if (IsShowTiShi)
|
||
|
{
|
||
|
EventIndex++;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
IEnumerator delayActive()
|
||
|
{
|
||
|
// GameObject.Find("Canvas/RightSet/备课模式/Grid/辅助工具").GetComponent<UnityEngine.UI.Toggle>().isOn = true;
|
||
|
yield return new WaitForEndOfFrame();
|
||
|
UPAndDownAttack.Instance.UpAndDownAttack(false);//此bool值在此无意义
|
||
|
// GameObject.Find("Canvas/RightSet/备课模式/Grid/辅助工具").GetComponent<UnityEngine.UI.Toggle>().isOn = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
public void CorrectLine(GameObject line)
|
||
|
{
|
||
|
|
||
|
|
||
|
var begin = line.GetComponent<GuanXianIDScript>().Begin;
|
||
|
var end = line.GetComponent<GuanXianIDScript>().End;
|
||
|
if ((end && end.name.Contains("xiaofangche")) && (begin && begin.name.Contains("xiaofangche")))
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if (end && end.name.Contains("xiaofang"))//管线结尾链接的是消防员/车,矫正下终点位置
|
||
|
{
|
||
|
var lineCount = line.transform.childCount;
|
||
|
if (lineCount > 0)
|
||
|
{
|
||
|
var line_correct = line.transform.GetChild(lineCount - 1);
|
||
|
var p1 = line_correct.GetComponent<LineMessage>().beginP;
|
||
|
var p2 = end.transform.position;
|
||
|
CorrectLine(line_correct, p1, p2);
|
||
|
}
|
||
|
}
|
||
|
if (begin && begin.name.Contains("xiaofang"))//管线结尾链接的是消防员/车,矫正下终点位置
|
||
|
{
|
||
|
var lineCount = line.transform.childCount;
|
||
|
if (lineCount > 0)
|
||
|
{
|
||
|
var line_correct = line.transform.GetChild(0);
|
||
|
var p2 = line_correct.GetComponent<LineMessage>().endP;
|
||
|
var p1 = begin.transform.position;
|
||
|
CorrectLine(line_correct, p1, p2);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
private void CorrectLine(Transform line_correct, Vector3 p1,Vector3 p2)
|
||
|
{
|
||
|
Vector3 tempPos = (p1 + p2) / 2;//计算两个点的中点坐标,
|
||
|
line_correct.position = tempPos;
|
||
|
line_correct.up = (-(p2 - p1)).normalized;//改变线条的朝向
|
||
|
float distance = Vector3.Distance(p1, p2);//计算两点的距离
|
||
|
line_correct.localScale = new Vector3(5f, distance * 18, 5f);//延长线条,连接两点。
|
||
|
line_correct.GetComponent<LineMessage>().SetPos(p1, p2);//记录该节管线的首尾点坐标,用于后期管线位置矫正
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class PlayBackEventArgs : EventArgs
|
||
|
{
|
||
|
public bool IsMakeScore;
|
||
|
public PlayBackEventArgs(bool isMakeScore)
|
||
|
{
|
||
|
IsMakeScore = isMakeScore;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|