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.
878 lines
39 KiB
878 lines
39 KiB
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; |
|
} |
|
} |
|
} |
|
|
|
|