using System; using System.Collections; using System.Collections.Generic; using System.Xml; using UnityEngine; using UnityEngine.Networking; using ZXKFramework; public class ResultManager : MonoBehaviour { ResultInfo resultInfo; StepInfo stepInfo; string title; int appid; string originId; [Header("是否允许重复操作并记录某一步骤")] public bool replaceStep; int seq; public void Init() { seq = 1; StartCoroutine(XmlReader()); } public void StartStep(string subModule, string task, int expectTime, string stepType, string answer, string yourAnswer) { if (resultInfo == null) { resultInfo = new ResultInfo(); resultInfo.title = title; resultInfo.status = 2; resultInfo.startTime = UnityTools.GetTimeStamp(); resultInfo.appid = appid; resultInfo.originId = originId; } stepInfo = GetStep(subModule, task); if (stepInfo == null) { stepInfo = new StepInfo(); } else if (!replaceStep) { if (!string.IsNullOrEmpty(stepInfo.endTime)) { stepInfo = null; } return; } stepInfo.seq = seq; seq++; stepInfo.SetSubModule(subModule); stepInfo.SetStepType(stepType); stepInfo.SetAnswer(answer); stepInfo.SetYourAnswer(yourAnswer); stepInfo.title = task; stepInfo.startTime = UnityTools.GetTimeStamp(); stepInfo.expectTime = expectTime; stepInfo.repeatCount += 1; resultInfo.steps.Add(stepInfo); } public void EndStep(string subModule, string task, int score, int maxScore, string scoringModel, string yourAnswer) { //stepInfo = GetStep(subModule, task); if (stepInfo == null) return; if (stepInfo.GetSubModule() != subModule || stepInfo.title != task) return; stepInfo.endTime = UnityTools.GetTimeStamp(); stepInfo.timeUsed = UnityTools.TimeStampDiffSeconds(stepInfo.startTime, stepInfo.endTime); stepInfo.score = score; stepInfo.maxScore = maxScore; stepInfo.scoringModel = scoringModel; if (!string.IsNullOrEmpty(yourAnswer)) { stepInfo.SetYourAnswer(yourAnswer); } stepInfo.evaluation = ""; stepInfo.remarks = ""; resultInfo.status = 1; resultInfo.score = score; resultInfo.endTime = UnityTools.GetTimeStamp(); resultInfo.timeUsed = UnityTools.TimeStampDiffSeconds(resultInfo.startTime, resultInfo.endTime); } public string ToJson() { if (resultInfo == null) return ""; return UnityTools.GetJson(resultInfo); } public List ToList() { if (resultInfo == null) return null; return resultInfo.steps; } public void ClearResult() { stepInfo = null; resultInfo.steps.Clear(); seq = 1; } StepInfo GetStep(string subModule, string task) { if (resultInfo == null) return null; for (int i = 0; i < resultInfo.steps.Count; i++) { if (subModule == resultInfo.steps[i].GetSubModule() && task == resultInfo.steps[i].title) { return resultInfo.steps[i]; } } return null; } /// /// 读取StreamingAsset中的配置文件 /// IEnumerator XmlReader() { string path = Application.streamingAssetsPath + "/ResultConfig.xml"; using UnityWebRequest unityWebRequest = UnityWebRequest.Get(path); yield return unityWebRequest.SendWebRequest(); if (unityWebRequest.error != null) Debug.Log(unityWebRequest.error); else { string content = unityWebRequest.downloadHandler.text; XmlDocument doc = new(); doc.LoadXml(content); XmlNodeList nodeList = doc.SelectSingleNode("root").ChildNodes; foreach (XmlElement element in nodeList) { if (element.Name == "Title") { title = element.InnerText; } if (element.Name == "Appid") { appid = Convert.ToInt32(element.InnerText); } if (element.Name == "OriginId") { originId = element.InnerText; } } } } }