132 lines
4.0 KiB
C#
132 lines
4.0 KiB
C#
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
public class ScoreManager : MonoBehaviour
|
|
{
|
|
public static ScoreManager instance;
|
|
|
|
List<ScoreBase> scoreSubjectList;
|
|
|
|
private void Awake()
|
|
{
|
|
instance = this;
|
|
scoreSubjectList = transform.GetComponentsInChildren<ScoreBase>(true).ToList();
|
|
}
|
|
|
|
|
|
|
|
public ScoreBase GetScoreBaseBySchemeID(int _schemeID)
|
|
{
|
|
return scoreSubjectList.Find(a => a.schemeId == _schemeID);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 提交
|
|
/// </summary>
|
|
private void OnSubmit()
|
|
{
|
|
Debug.Log("OnCompelete");
|
|
if (GameManager.RunModelMgr.ModeType == E_ModeType.Study)
|
|
{
|
|
GameManager.NetMgr.SendResult(null);
|
|
}
|
|
else if (GameManager.RunModelMgr.ModeType == E_ModeType.Practice || GameManager.RunModelMgr.ModeType == E_ModeType.Exam)
|
|
{
|
|
ScoreModel scoreModel = GetScore(GameManager.RunModelMgr.schemeID);
|
|
string resultData = JsonConvert.SerializeObject(scoreModel);
|
|
Debug.Log(resultData);
|
|
GameManager.NetMgr.SendResult(resultData);
|
|
if (GameManager.RunModelMgr.ModeType == E_ModeType.Exam)
|
|
{
|
|
GameManager.UIMgr.ShowPanel<UI_ExamEndPanel>(E_UI_Layer.System, (p) =>
|
|
{
|
|
p.OnInit();
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 重置数据
|
|
/// </summary>
|
|
public void ReInit()
|
|
{
|
|
Debug.Log("重置计分脚本");
|
|
scoreSubjectList.ForEach(a => { a.Init(); });
|
|
GameManager.EventMgr.AddEventListener(Enum_EventType.Submit, OnSubmit);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置控制脚本
|
|
/// </summary>
|
|
/// <param name="subejctid"></param>
|
|
/// <param name="control"></param>
|
|
public void SetDeviceControl(int subejctid, Device_Control control)
|
|
{
|
|
scoreSubjectList.Find(a => a.schemeId == subejctid).SetDeviceControl(control);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检测分数
|
|
/// </summary>
|
|
/// <param name="systemctlid"></param>
|
|
/// <param name="schemeid"></param>
|
|
/// <param name="subProcessid">步骤</param>
|
|
public void Check(string triggerName, object para, int systemctlid = 0, int schemeid = 0)
|
|
{
|
|
if (systemctlid == 0)
|
|
systemctlid = GameManager.Instance.systemId;
|
|
if (schemeid == 0)
|
|
schemeid = GameManager.RunModelMgr.schemeID;
|
|
|
|
ScoreBase sb = scoreSubjectList.Find(a => a.systemId == systemctlid && a.schemeId == schemeid);
|
|
|
|
//如果是现场必须等待初始化完成
|
|
if (GameManager.RunModelMgr.SceneType == E_SceneType.Site)
|
|
{
|
|
//Debug.Log("sssssssssss" + sb.device_Control);
|
|
if (sb.device_Control.hasInit == false)
|
|
return;
|
|
}
|
|
|
|
sb.CheckScore(triggerName, para);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据方案/科目ID获取总分
|
|
/// </summary>
|
|
/// <param name="subjectid"></param>
|
|
/// <returns></returns>
|
|
public ScoreModel GetScore(int subjectid)
|
|
{
|
|
ScoreBase sb = scoreSubjectList.Find(a => a.schemeId == subjectid);
|
|
ScoreModel scoreModel = new ScoreModel();
|
|
scoreModel.time = (DateTime.Now - GameManager.RunModelMgr.startTime).TotalSeconds.ToString();
|
|
scoreModel.score = sb.GetTotalScore();
|
|
var step = sb.GetStepScore();
|
|
foreach (var item in step)
|
|
{
|
|
ScoreInfo scoreInfo = new ScoreInfo();
|
|
scoreInfo.setScore = item.Value.currentScore;
|
|
scoreInfo.defaultScore = item.Value.maxScore;
|
|
scoreInfo.stepName = item.Value.step.subProcessName;
|
|
scoreInfo.testPoint = item.Value.step.tips;
|
|
scoreInfo.isKey = item.Value.isOneVoteVeto;
|
|
scoreModel.stepList.Add(scoreInfo);
|
|
}
|
|
|
|
return scoreModel;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
Debug.Log("scoreManger.destroy");
|
|
GameManager.EventMgr.RemoveEventListener(Enum_EventType.Submit, OnSubmit);
|
|
}
|
|
} |