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);*/ } } }