2025-03-11 15:30:07 +08:00

146 lines
4.6 KiB
C#

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<StepInfo> 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;
}
/// <summary>
/// 读取StreamingAsset中的配置文件
/// </summary>
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;
}
}
}
}
}