CultivationOfBrewing-2/Assets/Scripts/CXX/Score/ScoreManager.cs

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