using ChivaXR; using ChivaXR.Op; using Org.BouncyCastle.Bcpg.OpenPgp; using QFramework; using Sirenix.OdinInspector; using System; using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; public class PranticeManagerForPC : MonoBehaviour { public static PranticeManagerForPC instance; [BoxGroup("配分模块", CenterLabel = true, Order = 1)] /// /// 考试信息 /// [TableList(MaxScrollViewHeight = 20)] public List m_PranticeProcessElements; private ProcessElement currentProcessElement; [BoxGroup("场景配置模块", CenterLabel = true, Order = 0), GUIColor(0, 1, 0, 0.6f)] [Button("1.获取流程信息")] public void GetPranticeProcessElements() { List processElements = ProcessManagement.Instance.processes; //临时转存,用户数据恢复 List tmpExamProcessElements = m_PranticeProcessElements; //重建考试信息列表 m_PranticeProcessElements = new List(); foreach (var item in processElements) { PranticeProcessElement examProcessElement = tmpExamProcessElements.Find(t => t.elementDescript == item.processBase.GetPBDescribe()); if (examProcessElement != null) { m_PranticeProcessElements.Add(examProcessElement); } else { StepListProxy tmpProxy = DAL.Instance.Get(); if (tmpProxy == null) { tmpProxy.ReadStepMsgInfoFromTable(OperateSetting.Instance.m_CourseName); } OperationStepDataInfo tmpInfo = tmpProxy.GetOpStepDataInfoById(item.stepID); m_PranticeProcessElements.Add(new PranticeProcessElement() { id = item.stepID, elementDescript = item.processBase.GetPBDescribe(), stepName = tmpInfo.stepName }); } } } /// /// 练习开始时间 /// public DateTime m_StartTime; /// /// 练习结束时间 /// public DateTime m_EndTime; private void Awake() { instance = this; GetPranticeProcessElements(); m_StartTime = DateTime.Now; } public void Init() { ProcessManagement.Instance.processElementActiveEvent += ProcessElementActive; ProcessManagement.Instance.processElementDisActiveEvent += ProcessElementDisActive; ProcessManagement.Instance.processFinishEvent += PranticeFinish; } /// /// 步骤进入 /// /// private void ProcessElementActive(ProcessElement element) { currentProcessElement = element; } /// /// 步骤退出 /// /// private void ProcessElementDisActive(ProcessElement element) { JianTouManager.instance.SetJianTouActive(false); PranticeProcessElement tmpElement = m_PranticeProcessElements.Find(t => t.elementDescript == currentProcessElement.processBase.GetPBDescribe()); if (tmpElement.finish == false) { tmpElement.finish = true; if (tmpElement.errorReason == null) { tmpElement.result = true; } tmpElement.operationTime = DateTime.Now; } } /// /// 成绩展示 /// public void PranticeFinish() { m_EndTime = DateTime.Now; UIKit.OpenPanel(new PC_PranticeResultPanelData() { pranticeProcessElementsData = m_PranticeProcessElements }); } /// /// 记录操作错误 /// /// public void RecordFault(int processId) { PranticeProcessElement tmpElement = m_PranticeProcessElements.Find(t => t.id == processId); if (tmpElement != null) { tmpElement.errorReason = "操作错误"; tmpElement.result = false; string screenShotName = DateTime.UtcNow.Ticks.ToString(); StartCoroutine(ScrrenCapture(new Rect(0, 0, Screen.width, Screen.height), 0, screenShotName, tmpElement)); } } Texture2D screenShot;//保存截取的纹理 IEnumerator ScrrenCapture(Rect rect, int a, string screenShotName, PranticeProcessElement pranticeProcessElement) { Debug.Log("截图:" + screenShotName); screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false); yield return new WaitForSeconds(0.5f); yield return new WaitForEndOfFrame(); screenShot.ReadPixels(rect, 0, 0); screenShot.Apply(); //推送 //PushHelper.InitBasicData(); //StartCoroutine(PushHelper.SendFileStreamPushRequest(screenShot, screenShotName, (result, msg, flag, cmnAttachId) => // { // if (!result) // { // Debug.LogError(msg); // } // else // { // pranticeProcessElement.screenshotList.Add(cmnAttachId.data.cmnAttachId); // } // pranticeProcessElement.m_UpLoading.Remove(screenShotName); // })); pranticeProcessElement.m_UpLoading.Add(screenShotName); } /// /// 是否上传完成 /// /// public bool IsFinishUpLoad() { foreach (var item in m_PranticeProcessElements) { if (item.m_UpLoading.Count > 0) { return false; } } return true; } } [Serializable] public class PranticeProcessElement { [Sirenix.OdinInspector.ReadOnly] public int id; [Sirenix.OdinInspector.ReadOnly] public string elementDescript; /// /// 错误与否 /// [Sirenix.OdinInspector.ReadOnly] public bool result; /// /// 是否完成 /// [Sirenix.OdinInspector.ReadOnly] public bool finish = false; /// /// 错误截图 /// public List screenshotList = new List(); /// /// 操作时间 /// public DateTime operationTime; /// /// 错误原因 /// public string errorReason; /// /// 步骤名称 /// public string stepName; /// /// 正在上传的任务 /// public List m_UpLoading = new List(); }