using CG.UTility; using Newtonsoft.Json; using System.Collections; using System.Collections.Generic; using UnityEngine; /******************************************************************************* *Create By CG *Function 部件拆解 *******************************************************************************/ namespace ZXK.GYJQR { public class DataBJCJHandler { //public static Dictionary _BJCZSpriteArray=new Dictionary();//节约每次加载时间,第一次加载后静态存储 /// /// 考核分数管理 /// [步骤名字[步骤子类,得分]] /// private Dictionary> _examScore = new Dictionary>(); /// /// 当前所在操作状态 /// 部件认知|一键拆解|一键拼装|顺序拆解|原理示意 /// public BindableProperty _CurState = new BindableProperty() { Value = (int)EnumCtrl.BJCZState.None }; /// /// 当前正在介绍的模型 /// public BindablePropertyRef _ShowPartsName = new BindablePropertyRef() { Value = "" }; /// /// 部件认知时当前正在选中的物体 /// public BindablePropertyDic _CurBJRZhandler = new BindablePropertyDic(); /// /// 一键拆解时当前正在拆解步骤 /// public BindablePropertyDic _CurYJCJhandler = new BindablePropertyDic(); /// /// 一键拼装时当前正在合成步骤 /// private Dictionary> _curYJCJCombinatehandler = new Dictionary>(); public System.Action OnYJCJCombinateChanged; /// /// 顺序拆解中当前正在拆解步骤 /// public BindablePropertyDic _CurDismountStephandler = new BindablePropertyDic(); public BindablePropertyDic _CurYLSYhandler = new BindablePropertyDic(); private Dictionary> _bjrzDataArray = new Dictionary>(); /// /// 部件认知数据集合 /// public Dictionary> _BJRZDataArray { get => _bjrzDataArray; } private Dictionary> _yjcjDataArray = new Dictionary>(); /// /// 一键拆解数据集合 /// public Dictionary> _YJCJDataArray { get => _yjcjDataArray; } private Dictionary> _sxcjDataArray = new Dictionary>(); /// /// 顺序拆解数据集合 /// public Dictionary> _SXCJDataArray { get => _sxcjDataArray; } private Dictionary> _ylsyDataArray = new Dictionary>(); /// /// 原理示意数据集合 /// public Dictionary> _YLSYDataArray { get => _ylsyDataArray; } public DataBJCJHandler() { InitAppData(); } public void InitAppData() { string bjrzInfoPath = Application.streamingAssetsPath + ConstCtrl.JSON_PATH + "BJCZ_BJRZ.txt"; //string bjrzDetail = TxtFileHandle.ReadAllTxt(bjrzInfoPath); //_bjrzDataArray = JsonConvert.DeserializeObject>>(bjrzDetail); TxtFileHandle.ReadAllTxt(bjrzInfoPath, (string vul) => { _bjrzDataArray = JsonConvert.DeserializeObject>>(vul); }); string yjcjInfoPath = Application.streamingAssetsPath + ConstCtrl.JSON_PATH + "BJCZ_YJCJ.txt"; //string yjcjDetail = TxtFileHandle.ReadAllTxt(yjcjInfoPath); //_yjcjDataArray = JsonConvert.DeserializeObject>>(yjcjDetail); TxtFileHandle.ReadAllTxt(yjcjInfoPath, (string vul) => { _yjcjDataArray = JsonConvert.DeserializeObject>>(vul); }); string ylsyInfoPath = Application.streamingAssetsPath + ConstCtrl.JSON_PATH + "BJCZ_YLSY.txt"; //string ylsyDetail = TxtFileHandle.ReadAllTxt(ylsyInfoPath); //_ylsyDataArray = JsonConvert.DeserializeObject>>(ylsyDetail); TxtFileHandle.ReadAllTxt(ylsyInfoPath, (string vul) => { _ylsyDataArray = JsonConvert.DeserializeObject>>(vul); }); string SXCJpath = Application.streamingAssetsPath + ConstCtrl.JSON_PATH + "BJCZ_SXCJ.txt"; //string SXCJdetail = TxtFileHandle.ReadAllTxt(SXCJpath); //_sxcjDataArray = JsonConvert.DeserializeObject>>(SXCJdetail); TxtFileHandle.ReadAllTxt(SXCJpath, (string vul) => { _sxcjDataArray = JsonConvert.DeserializeObject>>(vul); //针对顺序拆解中的每个步骤开始播放动画时间动态赋值 foreach (var item in _sxcjDataArray) { for (int i = 0; i < item.Value.Count; i++) { item.Value[i].AnmStartTime = i * 2; } } }); } /// /// 在部件认知中通过部件ID获取部件实体信息 /// /// /// public BJCJ_INFO GetBJRZInfoByID(string partID) { for (int i = 0; i < _BJRZDataArray[_ShowPartsName.Value].Count; i++) { if (_BJRZDataArray[_ShowPartsName.Value][i].id.ToString().Equals(partID)) { return _BJRZDataArray[_ShowPartsName.Value][i]; } } return null; } /// /// 在部件认知中通过部件物体名字获取部件实体信息 /// /// /// public BJCJ_INFO GetBJRZInfoByPartName(string geoName) { for (int i = 0; i < _BJRZDataArray[_ShowPartsName.Value].Count; i++) { if (_BJRZDataArray[_ShowPartsName.Value][i].itemGeo.Equals(geoName)) { return _BJRZDataArray[_ShowPartsName.Value][i]; } } return null; } /// /// 在一键拆解中通过部件ID获取部件实体信息 /// /// /// public BJCJ_INFO GetYJCJInfoByID(string partID) { for (int i = 0; i < _YJCJDataArray[_ShowPartsName.Value].Count; i++) { if (_YJCJDataArray[_ShowPartsName.Value][i].id.ToString().Equals(partID)) { return _YJCJDataArray[_ShowPartsName.Value][i]; } } return null; } /// /// 在一键拆解中通过部件物体名字获取部件实体信息 /// /// /// public BJCJ_INFO GetYJCJInfoByPartName(string geoName) { for (int i = 0; i < _YJCJDataArray[_ShowPartsName.Value].Count; i++) { if (_YJCJDataArray[_ShowPartsName.Value][i].itemGeo.Equals(geoName)) { return _YJCJDataArray[_ShowPartsName.Value][i]; } } return null; } /// /// 在一键拆解中获取拼合部件 /// /// public Dictionary> GetYJCJCombinate() { return _curYJCJCombinatehandler; } /// /// 在一键拆解中填入一个已拼合部件 /// public void AddYJCJCombinate(BJCJ_INFO partInfo) { foreach (var item in _YJCJDataArray) { if (item.Key.Equals(_ShowPartsName.Value)) { if (_curYJCJCombinatehandler.ContainsKey(_ShowPartsName.Value)) { if (_curYJCJCombinatehandler[_ShowPartsName.Value] != null && _curYJCJCombinatehandler[_ShowPartsName.Value].Count > 0 && !_curYJCJCombinatehandler[_ShowPartsName.Value].Contains(partInfo)) { _curYJCJCombinatehandler[_ShowPartsName.Value].Add(partInfo); } else { List partinfos = new List(); partinfos.Add(partInfo); _curYJCJCombinatehandler[_ShowPartsName.Value] = partinfos; } } else {//第一次查看此模块 List partinfos = new List(); partinfos.Add(partInfo); _curYJCJCombinatehandler.Add(_ShowPartsName.Value, partinfos); } } } OnYJCJCombinateChanged?.Invoke(partInfo); } /// /// 在一键拆解中清除拼合部件 /// public void ClearYJCJCombinate() { _curYJCJCombinatehandler.Clear(); } /// /// 在原理示意中通过部件ID获取部件实体信息 /// /// /// public BJCJ_INFO GetYLSYInfoByID(string partID) { for (int i = 0; i < _YLSYDataArray[_ShowPartsName.Value].Count; i++) { if (_YLSYDataArray[_ShowPartsName.Value][i].id.ToString().Equals(partID)) { return _YLSYDataArray[_ShowPartsName.Value][i]; } } return null; } /// /// 在顺序拆解中通过部件ID获取部件实体信息 /// /// /// public BJCJ_SXCJ GetSXCJInfoByID(string partID) { for (int i = 0; i < _SXCJDataArray[_ShowPartsName.Value].Count; i++) { if (_SXCJDataArray[_ShowPartsName.Value][i].id.ToString().Equals(partID)) { return _SXCJDataArray[_ShowPartsName.Value][i]; } } return null; } /// /// 在顺序拆解中通过部件ID获取下一个部件实体信息 /// /// /// public BJCJ_SXCJ GetSXCJNextInfo(string partID) { for (int i = 0; i < _SXCJDataArray[_ShowPartsName.Value].Count; i++) { if (_SXCJDataArray[_ShowPartsName.Value][i].id.ToString().Equals(partID)) { if (i < _SXCJDataArray[_ShowPartsName.Value].Count - 1) return _SXCJDataArray[_ShowPartsName.Value][i + 1]; else return _SXCJDataArray[_ShowPartsName.Value][i]; } } return null; } /// /// 根据成绩单布局返回成绩 /// /// [步骤名,子步骤名,总成绩,实际成绩] public Queue GetExamScore() { Queue scoreFinish = new Queue(); BJCJ_SXCJ curstep = null; BJCJ_SXCJ nextstep = null; float curStepChildTotalScore = 0; float realityScore = 0; for (int i = 0; i < _sxcjDataArray[ConstCtrl.BJCZ_MAINMODEL1_NAME].Count; i++) { curstep = _sxcjDataArray[ConstCtrl.BJCZ_MAINMODEL1_NAME][i]; if(i== _sxcjDataArray[ConstCtrl.BJCZ_MAINMODEL1_NAME].Count - 1) { nextstep = null; } else { nextstep = _sxcjDataArray[ConstCtrl.BJCZ_MAINMODEL1_NAME][i + 1]; } curStepChildTotalScore += curstep.score; if (nextstep==null||!nextstep.stepNameChild.Equals(curstep.stepNameChild)) { realityScore = 0; if (_examScore.ContainsKey(curstep.stepName)&& _examScore[curstep.stepName].ContainsKey(curstep.stepNameChild)) { realityScore = _examScore[curstep.stepName][curstep.stepNameChild]; } scoreFinish.Enqueue(new string[] { curstep.stepName, curstep.stepNameChild, curStepChildTotalScore.ToString(), realityScore.ToString() }); curStepChildTotalScore = 0; } } return scoreFinish; } /// /// 操作正确步骤后得分 /// /// 大步骤名字 /// 子步骤名字 /// 当前步骤可得分数 /// public float AddScore(string bigStepName, string smallStepName, float score) { if (!_examScore.ContainsKey(bigStepName)) { _examScore.Add(bigStepName, new Dictionary()); } if (!_examScore[bigStepName].ContainsKey(smallStepName)) { _examScore[bigStepName].Add(smallStepName, 0); } _examScore[bigStepName][smallStepName] += score; return _examScore[bigStepName][smallStepName]; } } }