diff --git a/Assets/Scripts/ExcelData/DataContainer/TB_UserExamStat.cs b/Assets/Scripts/ExcelData/DataContainer/TB_UserExamStat.cs
index 8de9982..090cc29 100644
--- a/Assets/Scripts/ExcelData/DataContainer/TB_UserExamStat.cs
+++ b/Assets/Scripts/ExcelData/DataContainer/TB_UserExamStat.cs
@@ -1,27 +1,78 @@
///
/// 保存用户考试状态
///
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+//用于记录当前得分情况
+[Serializable]
+public class ReconnectSubScoreInfo
+{
+ public int index = -1;
+ public int subProcessId;
+ public float currentScore = 0.0f;
+ public bool isDone;
+}
+
+//用于记录现场中各项出发物品信息
+[Serializable]
+public class ReconnectTriggerInfo
+{
+ public int triggerID;
+ public string triggerName;
+ public Vector3 selfPosInScene;
+ public Vector3 selfRotInScene;
+}
+
+
+//用于记录场景中物品的信息
+[Serializable]
+public class ReconnectItemInfo
+{
+ public int toolId;
+ public int triggerID;
+ public string toolName;
+ //public E_ToolOrDeviceOrMaterials toolOrDeviceOrMaterial;
+ public Vector3 selfPosInToolRoom;
+}
public class TB_UserExamStat
{
- ///
- ///当前方案ID
- ///
- public int schemeID = -1;
+ public int systemID = -1;//当前系统ID
+ public int schemeID = -1;//当前方案ID
+ /*public int processId = -1;// 当前流程Id
+ public int subProcessId = -1;//当前子流程Id
+ public int subProcessStepId = -1;//当前子流程步骤Id*/
///
- /// 当前流程Id
+ /// 当前得分情况
///
- public int processId = -1;
+ public float currentScore = 0;
+ public List allSubScore = new List();
///
- /// 当前子流程Id
+ /// 背包中所有的工具和材料
///
- public int subProcessId = -1;
+ public List allToolAndMaterial = new List();
///
- /// 当前子流程步骤Id
+ /// 所有已经穿戴的装备
///
- public int subProcessStepId = -1;
+ public List allWear = new List();
+ ///
+ /// 场景名称
+ ///
+ public string sceneName = "";
+
+ ///
+ /// 当前场景内的所有装备和材料
+ ///
+ public List currentSceneTools = new List();
+
+ ///
+ /// 当前场景内的所有可触发物品
+ ///
+ public List currentSceneTriggers = new List();
}
diff --git a/Assets/Scripts/Project/Manager/GameManager.cs b/Assets/Scripts/Project/Manager/GameManager.cs
index bc69488..09f37b5 100644
--- a/Assets/Scripts/Project/Manager/GameManager.cs
+++ b/Assets/Scripts/Project/Manager/GameManager.cs
@@ -126,7 +126,7 @@ public class GameManager : SingletonAutoMono
RunModelMgr = RunModelMgr.Instance;
ToolAndmaterialMgr = ToolAndmaterialMgr.Instance;
PacksackBagMgr = PacksackBagMgr.Instance;
- //ReconnectMgr = ReconnectMgr.Instance;//閲嶈繛绠$悊鍒濆鍖
+ ReconnectMgr = ReconnectMgr.Instance;//閲嶈繛绠$悊鍒濆鍖
DataMgr.Init();
InitData();
diff --git a/Assets/Scripts/Project/Manager/ProcessManager.cs b/Assets/Scripts/Project/Manager/ProcessManager.cs
index f13ec1c..af29268 100644
--- a/Assets/Scripts/Project/Manager/ProcessManager.cs
+++ b/Assets/Scripts/Project/Manager/ProcessManager.cs
@@ -80,8 +80,8 @@ public class ProcessManager : BaseManager
{
this.schemeID = id;
this.mode = mode;
- coroutine = GameManager.MonoMgr.StartCoroutine(CountDown(countDown));
- //coroutine = GameManager.MonoMgr.StartCoroutine(AutoSaveStat(countDown));//鑷姩淇濆瓨鐢ㄦ埛鐘舵佷俊鎭
+ //coroutine = GameManager.MonoMgr.StartCoroutine(CountDown(countDown));
+ coroutine = GameManager.MonoMgr.StartCoroutine(AutoSaveStat(countDown));//鑷姩淇濆瓨鐢ㄦ埛鐘舵佷俊鎭
d_Scheme = DataManager.Instance.GetSchemeData(id);
ReportManager.Instance.creport = DataManager.Instance.GetSchemeReport(id);
GameManager.ToolAndmaterialMgr.Init(d_Scheme.ToolOrMaterilOrDevice);
diff --git a/Assets/Scripts/Project/Manager/ReconnectMgr.cs b/Assets/Scripts/Project/Manager/ReconnectMgr.cs
index e18100f..24f4609 100644
--- a/Assets/Scripts/Project/Manager/ReconnectMgr.cs
+++ b/Assets/Scripts/Project/Manager/ReconnectMgr.cs
@@ -1,11 +1,11 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
-
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
using LitJson;
+using System;
///
/// 断线重连管理
@@ -18,6 +18,7 @@ public class ReconnectMgr : SingletonMono
private TB_UserExamStat UserExamStat = new TB_UserExamStat();
private string localStatPath = "";
private string localStatFileName = "realtimeStat.json";
+
///
/// 初始化函数,记录时间间隔
///
@@ -42,13 +43,81 @@ public class ReconnectMgr : SingletonMono
{
//记录步骤相关各项信息
UserExamStat.schemeID = ProcessManager.Instance.schemeID;
- UserExamStat.processId = ProcessManager.Instance.processId;
+
+ //记录得分情况
+ ScoreBase scoreBase = FindFirstObjectByType();
+ UserExamStat.systemID = scoreBase.systemId;
+ UserExamStat.allSubScore.Clear();
+ if ( scoreBase != null )
+ {
+ foreach (var item in scoreBase.GetStepScore())
+ {
+ ReconnectSubScoreInfo sub = new ReconnectSubScoreInfo();
+ sub.index = item.Key;
+ sub.subProcessId = item.Value.subProcessId;
+ sub.currentScore = item.Value.currentScore;
+ sub.isDone = item.Value.isDone;
+ UserExamStat.allSubScore.Add( sub );
+ };
+ }
+ /*UserExamStat.processId = ProcessManager.Instance.processId;
UserExamStat.subProcessId = ProcessManager.Instance.subProcessId;
- UserExamStat.subProcessStepId = ProcessManager.Instance.subProcessStepId;
+ UserExamStat.subProcessStepId = ProcessManager.Instance.subProcessStepId;*/
+ //记录装备材料信息
+ UserExamStat.allToolAndMaterial.Clear();
+ Dictionary> toolAndMaterialDic = PacksackBagMgr.Instance.GetCurrentBagData();
+ foreach (var item in toolAndMaterialDic)
+ {
+ foreach (var itemInfo in item.Value)
+ {
+ UserExamStat.allToolAndMaterial.Add(((ItemInfo)itemInfo).toolName);
+ }
+
+ }
+
+ //记录已穿戴设备
+ UserExamStat.allWear.Clear();
+ Dictionary wearDic = PacksackBagMgr.Instance.wearDic;
+ foreach (var item in wearDic)
+ {
+ UserExamStat.allWear.Add(((ItemInfo)item.Value).toolName);
+ }
+
+ //获取当前所加载场景的名字
+ UserExamStat.sceneName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name;
+
+ //获取场景内(工具间)所有可以装备材料的物品
+ UserExamStat.currentSceneTools.Clear();
+ BaseToolOrDevice[] allThings = FindObjectsOfType();
+ foreach (BaseToolOrDevice item in allThings)
+ {
+ //Debug.Log(item.itemInfo.toolName);
+ ReconnectItemInfo rec = new ReconnectItemInfo();
+ rec.toolId = item.itemInfo.toolId;
+ rec.toolName = item.itemInfo.toolName;
+ rec.triggerID = item.itemInfo.triggerID;
+ //rec.toolOrDeviceOrMaterial = item.itemInfo.toolOrDeviceOrMaterial;
+ rec.selfPosInToolRoom = item.itemInfo.selfPosInToolRoom;
+ UserExamStat.currentSceneTools.Add(rec);
+ }
+
+ //获取场景内(现场)所有可以出发的装置
+ UserExamStat.currentSceneTriggers.Clear();
+ PermanentTriggerBase[] allPermanentTriggers = FindObjectsOfType();
+ foreach (PermanentTriggerBase item in allPermanentTriggers)
+ {
+ ReconnectTriggerInfo ret = new ReconnectTriggerInfo();
+ ret.triggerName = item.triggerName;
+ ret.triggerID = item.triggerID;
+ ret.selfPosInScene = item.transform.localPosition;
+ ret.selfRotInScene = item.transform.localEulerAngles;
+ UserExamStat.currentSceneTriggers.Add(ret);
+ }
+
+ //转换为JSON
string UserJson = JsonConvert.SerializeObject(UserExamStat, Formatting.Indented);
- Debug.Log("用户当前状态" + UserJson);
-
+ Debug.Log("自动保存成功");
File.WriteAllText(localStatPath, UserJson);
}
@@ -65,7 +134,6 @@ public class ReconnectMgr : SingletonMono
string user_last_stat = sr.ReadToEnd();
sr.Close();
UserExamStat = JsonMapper.ToObject(user_last_stat);
- Debug.Log("用户当前schemeID:" + UserExamStat.schemeID);
return true;
}
catch (System.Exception e)
@@ -79,28 +147,83 @@ public class ReconnectMgr : SingletonMono
}
}
- // Start is called before the first frame update
- //void Start()
- //{
-
- //}
+ ///
+ /// 恢复现场
+ ///
+ public void RecoverScene()
+ {
+ //先恢复场景
+ ScenesManager.Instance.LoadSceneAsyn(UserExamStat.sceneName, () => {
+ //右侧工具栏切换
+ GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchScene, GameManager.RunModelMgr.SceneType);
+ //恢复场景中各项装备
+ BaseToolOrDevice[] allThings = FindObjectsOfType();
+ foreach (BaseToolOrDevice item in allThings)
+ {
+ item.gameObject.SetActive(false);//先全部隐藏
+ foreach (ReconnectItemInfo rec in UserExamStat.currentSceneTools)
+ {
+ if (item.itemInfo.toolName.Equals(rec.toolName) && item.itemInfo.toolId == rec.toolId)
+ {
+ if (item.itemInfo.selfPosInToolRoom.Equals(rec.selfPosInToolRoom))
+ {
+ item.gameObject.SetActive(true);
+ break;
+ }
+ }
+ }
+ }
+
+ //恢复背包中的装备
+ List itemInPack = ToolAndmaterialMgr.Instance.CreateItemInfoByName(UserExamStat.allToolAndMaterial);
+ foreach (ItemInfo item in itemInPack)
+ {
+ PacksackBagMgr.Instance.AddOneToolOrMater(item);
+ }
+
+ //恢复已穿戴的装备
+ List itemWear = ToolAndmaterialMgr.Instance.CreateItemInfoByName(UserExamStat.allWear);
+ foreach (ItemInfo item in itemWear)
+ {
+ PacksackBagMgr.Instance.WearItemState(item, true);
+ }
+
+ //恢复场景内各个触发器状态
+ PermanentTriggerBase[] allPermanentTriggers = FindObjectsOfType();
+ List allReconTrigs = UserExamStat.currentSceneTriggers;
+ foreach (PermanentTriggerBase item in allPermanentTriggers)
+ {
+ item.gameObject.SetActive(false);
+ foreach (ReconnectTriggerInfo ret in allReconTrigs)
+ {
+ if (item.triggerName == ret.triggerName)
+ {
+ item.gameObject.SetActive(true);
+ item.transform.localPosition = ret.selfPosInScene;
+ item.transform.localEulerAngles = ret.selfRotInScene;
+ break;
+ }
+ }
+ }
+ });
+ }
// Update is called once per frame
void Update()
{
- if (Input.GetKeyDown(KeyCode.S))//测试用,按S读取状态保存
+ if (Input.GetKeyDown(KeyCode.T))//测试用,按T读取状态保存
{
RealtimeStatWriter();
+ Debug.Log("当前场景:" + UserExamStat.sceneName);
}
- else if(Input.GetKeyDown(KeyCode.R))
+ else if(Input.GetKeyDown(KeyCode.Y))
{
RealtimeStatReader();
-
- ProcessManager.Instance.HandoverProcess(UserExamStat.processId, UserExamStat.subProcessId, UserExamStat.subProcessStepId);
+ RecoverScene();
+ /*ProcessManager.Instance.HandoverProcess(UserExamStat.processId, UserExamStat.subProcessId, UserExamStat.subProcessStepId);
StepStateControl.instance.InvokeInitStepState(GameManager.Instance.systemId, GameManager.ProcessMgr.d_Scheme.id, UserExamStat.subProcessId);
GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcess, UserExamStat.subProcessId);
- //Debug.LogError(ProcessManager.Instance.subProcessStepTriggerID);
- GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcessStepTriggerID, ProcessManager.Instance.subProcessStepTriggerID);
+ GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcessStepTriggerID, ProcessManager.Instance.subProcessStepTriggerID);*/
}
}
}