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 scoreSubjectList; private void Awake() { instance = this; scoreSubjectList = transform.GetComponentsInChildren(true).ToList(); } public ScoreBase GetScoreBaseBySchemeID(int _schemeID) { return scoreSubjectList.Find(a => a.schemeId == _schemeID); } /// /// 提交 /// 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(E_UI_Layer.System, (p) => { p.OnInit(); }); } } } /// /// 重置数据 /// public void ReInit() { Debug.Log("重置计分脚本"); scoreSubjectList.ForEach(a => { a.Init(); }); GameManager.EventMgr.AddEventListener(Enum_EventType.Submit, OnSubmit); } /// /// 设置控制脚本 /// /// /// public void SetDeviceControl(int subejctid, Device_Control control) { scoreSubjectList.Find(a => a.schemeId == subejctid).SetDeviceControl(control); } /// /// 检测分数 /// /// /// /// 步骤 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); } /// /// 根据方案/科目ID获取总分 /// /// /// 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); } }