using ReadyPlayerMe.Core.WebView; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using static MainCanvasManager; /// /// 评分管理 /// public class ScoreManager : MonoSingleton { /// /// 步骤id对应api匹配规则 /// Dictionary> step_id_to_apis = new Dictionary>(); /// /// 步骤id对应分数 /// Dictionary step_id_to_score = new Dictionary(); public float total_score; // Start is called before the first frame update void Start() { //InitScoreData(); } // Update is called once per frame void Update() { } /// /// 初始化评分规则数据 /// public void InitScoreData() { for (int j = 0; j < task_panel.task_item_data.task_steplist.Count; j++) { var _task_step = task_panel.task_item_data.task_steplist[j]; Debug.Log(_task_step.id + "评分id123"); if (!step_id_to_apis.ContainsKey(_task_step.id)) step_id_to_apis.Add(_task_step.id,new List()); if (!step_id_to_score.ContainsKey(_task_step.id)) step_id_to_score.Add(_task_step.id, 0); for (int k = 0; k < _task_step.apiDetailList.Count; k++) { var _api_detail = _task_step.apiDetailList[k]; Debug.Log(_task_step.apiDetailList[k].apiFunction + "具体功能123"); step_id_to_apis[_task_step.id].Add(new ApidetailScore { functioName = _api_detail.apiFunction , isGET=false}); } } } /// /// 更新分数 /// /// public void UpdateScore(string _api_name) { if (GameManager.current_main_menu_type == MainMenuType.课程任务) { var _keys = FindKey(_api_name); //对可能的步骤更新 for (int i = 0; i < _keys.Count; i++) { if (step_id_to_score[_keys[i]] == 0) { var _step = task_panel.task_item_data.task_steplist.Find(x => x.id == _keys[i]); if (_step != null) { //得分 total_score += float.Parse(_step.stepScore); step_id_to_score[_keys[i]] = float.Parse(_step.stepScore); //提交步骤得分 Task_Setp_Back.instance.StepBack(_step, step_id_to_score[_keys[i]]); } } } if (MiniCanvasManager.Instance) MiniCanvasManager.Instance.task_panel.score_text.text = "分数:" + total_score.ToString(); task_panel.score_text.text = "分数:" + total_score.ToString(); //把当前分数传递给客户端 WebSocketServerManager.Instance.SendScore(total_score.ToString()); } } /// /// 根据api名称找到对应的步骤id /// /// /// 返回得分的步骤 public List FindKey(string _value) { var _key = new List(); foreach (var item in step_id_to_apis) { ApidetailScore apiscore=item.Value.Find(a => a.functioName == _value); if (apiscore != null) { //满足当前api apiscore.isGET = true; //全部满足则得分 if (item.Value.All(a => a.isGET)) { _key.Add(item.Key); } } } return _key; } /// /// 重置分数 /// public void ResetScore() { total_score = 0; var keys = step_id_to_score.Keys.ToList(); keys.ForEach(x => { if (step_id_to_score.ContainsKey(x)) { step_id_to_score[x] = 0; } }); var keys2=step_id_to_apis.Keys.ToList(); keys2.ForEach(x => { step_id_to_apis[x].ForEach(b => { b.isGET = false; }); }); if (MiniCanvasManager.Instance) MiniCanvasManager.Instance.task_panel.score_text.text = "分数:" + total_score.ToString(); task_panel.score_text.text = "分数:" + total_score.ToString(); //把当前分数传递给客户端 WebSocketServerManager.Instance.SendScore(total_score.ToString()); } } /// /// api判分类 /// public class ApidetailScore { /// /// 方法名称 /// public string functioName; /// /// 是否得分 /// public bool isGET; }