351 lines
14 KiB
C#
351 lines
14 KiB
C#
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<string,Sprite> _BJCZSpriteArray=new Dictionary<string, Sprite>();//节约每次加载时间,第一次加载后静态存储
|
|
/// <summary>
|
|
/// 考核分数管理
|
|
/// [步骤名字[步骤子类,得分]]
|
|
/// </summary>
|
|
private Dictionary<string, Dictionary<string, float>> _examScore = new Dictionary<string, Dictionary<string, float>>();
|
|
|
|
/// <summary>
|
|
/// 当前所在操作状态
|
|
/// 部件认知|一键拆解|一键拼装|顺序拆解|原理示意
|
|
/// </summary>
|
|
public BindableProperty<int> _CurState = new BindableProperty<int>()
|
|
{
|
|
Value = (int)EnumCtrl.BJCZState.None
|
|
};
|
|
/// <summary>
|
|
/// 当前正在介绍的模型
|
|
/// </summary>
|
|
public BindablePropertyRef<string> _ShowPartsName = new BindablePropertyRef<string>()
|
|
{
|
|
Value = ""
|
|
};
|
|
/// <summary>
|
|
/// 部件认知时当前正在选中的物体
|
|
/// </summary>
|
|
public BindablePropertyDic<string, BJCJ_INFO> _CurBJRZhandler = new BindablePropertyDic<string, BJCJ_INFO>();
|
|
/// <summary>
|
|
/// 一键拆解时当前正在拆解步骤
|
|
/// </summary>
|
|
public BindablePropertyDic<string, BJCJ_INFO> _CurYJCJhandler = new BindablePropertyDic<string, BJCJ_INFO>();
|
|
/// <summary>
|
|
/// 一键拼装时当前正在合成步骤
|
|
/// </summary>
|
|
private Dictionary<string, List<BJCJ_INFO>> _curYJCJCombinatehandler = new Dictionary<string, List<BJCJ_INFO>>();
|
|
public System.Action<BJCJ_INFO> OnYJCJCombinateChanged;
|
|
|
|
/// <summary>
|
|
/// 顺序拆解中当前正在拆解步骤
|
|
/// </summary>
|
|
public BindablePropertyDic<string, BJCJ_SXCJ> _CurDismountStephandler = new BindablePropertyDic<string, BJCJ_SXCJ>();
|
|
|
|
public BindablePropertyDic<string, BJCJ_INFO> _CurYLSYhandler = new BindablePropertyDic<string, BJCJ_INFO>();
|
|
|
|
|
|
private Dictionary<string, List<BJCJ_INFO>> _bjrzDataArray = new Dictionary<string, List<BJCJ_INFO>>();
|
|
/// <summary>
|
|
/// 部件认知数据集合
|
|
/// </summary>
|
|
public Dictionary<string, List<BJCJ_INFO>> _BJRZDataArray { get => _bjrzDataArray; }
|
|
|
|
private Dictionary<string, List<BJCJ_INFO>> _yjcjDataArray = new Dictionary<string, List<BJCJ_INFO>>();
|
|
/// <summary>
|
|
/// 一键拆解数据集合
|
|
/// </summary>
|
|
public Dictionary<string, List<BJCJ_INFO>> _YJCJDataArray { get => _yjcjDataArray; }
|
|
|
|
private Dictionary<string, List<BJCJ_SXCJ>> _sxcjDataArray = new Dictionary<string, List<BJCJ_SXCJ>>();
|
|
/// <summary>
|
|
/// 顺序拆解数据集合
|
|
/// </summary>
|
|
public Dictionary<string, List<BJCJ_SXCJ>> _SXCJDataArray { get => _sxcjDataArray; }
|
|
|
|
private Dictionary<string, List<BJCJ_INFO>> _ylsyDataArray = new Dictionary<string, List<BJCJ_INFO>>();
|
|
/// <summary>
|
|
/// 原理示意数据集合
|
|
/// </summary>
|
|
public Dictionary<string, List<BJCJ_INFO>> _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<Dictionary<string, List<BJCJ_INFO>>>(bjrzDetail);
|
|
TxtFileHandle.ReadAllTxt(bjrzInfoPath, (string vul) =>
|
|
{
|
|
_bjrzDataArray = JsonConvert.DeserializeObject<Dictionary<string, List<BJCJ_INFO>>>(vul);
|
|
});
|
|
|
|
string yjcjInfoPath = Application.streamingAssetsPath + ConstCtrl.JSON_PATH + "BJCZ_YJCJ.txt";
|
|
//string yjcjDetail = TxtFileHandle.ReadAllTxt(yjcjInfoPath);
|
|
//_yjcjDataArray = JsonConvert.DeserializeObject<Dictionary<string, List<BJCJ_INFO>>>(yjcjDetail);
|
|
TxtFileHandle.ReadAllTxt(yjcjInfoPath, (string vul) =>
|
|
{
|
|
_yjcjDataArray = JsonConvert.DeserializeObject<Dictionary<string, List<BJCJ_INFO>>>(vul);
|
|
});
|
|
|
|
string ylsyInfoPath = Application.streamingAssetsPath + ConstCtrl.JSON_PATH + "BJCZ_YLSY.txt";
|
|
//string ylsyDetail = TxtFileHandle.ReadAllTxt(ylsyInfoPath);
|
|
//_ylsyDataArray = JsonConvert.DeserializeObject<Dictionary<string, List<BJCJ_INFO>>>(ylsyDetail);
|
|
TxtFileHandle.ReadAllTxt(ylsyInfoPath, (string vul) =>
|
|
{
|
|
_ylsyDataArray = JsonConvert.DeserializeObject<Dictionary<string, List<BJCJ_INFO>>>(vul);
|
|
});
|
|
|
|
string SXCJpath = Application.streamingAssetsPath + ConstCtrl.JSON_PATH + "BJCZ_SXCJ.txt";
|
|
//string SXCJdetail = TxtFileHandle.ReadAllTxt(SXCJpath);
|
|
//_sxcjDataArray = JsonConvert.DeserializeObject<Dictionary<string, List<BJCJ_SXCJ>>>(SXCJdetail);
|
|
TxtFileHandle.ReadAllTxt(SXCJpath, (string vul) =>
|
|
{
|
|
_sxcjDataArray = JsonConvert.DeserializeObject<Dictionary<string, List<BJCJ_SXCJ>>>(vul);
|
|
//针对顺序拆解中的每个步骤开始播放动画时间动态赋值
|
|
foreach (var item in _sxcjDataArray)
|
|
{
|
|
for (int i = 0; i < item.Value.Count; i++)
|
|
{
|
|
item.Value[i].AnmStartTime = i * 2;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
/// <summary>
|
|
/// 在部件认知中通过部件ID获取部件实体信息
|
|
/// </summary>
|
|
/// <param name="partID"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 在部件认知中通过部件物体名字获取部件实体信息
|
|
/// </summary>
|
|
/// <param name="partName"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 在一键拆解中通过部件ID获取部件实体信息
|
|
/// </summary>
|
|
/// <param name="partName"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 在一键拆解中通过部件物体名字获取部件实体信息
|
|
/// </summary>
|
|
/// <param name="partName"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 在一键拆解中获取拼合部件
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public Dictionary<string, List<BJCJ_INFO>> GetYJCJCombinate()
|
|
{
|
|
return _curYJCJCombinatehandler;
|
|
}
|
|
/// <summary>
|
|
/// 在一键拆解中填入一个已拼合部件
|
|
/// </summary>
|
|
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<BJCJ_INFO> partinfos = new List<BJCJ_INFO>();
|
|
partinfos.Add(partInfo);
|
|
_curYJCJCombinatehandler[_ShowPartsName.Value] = partinfos;
|
|
}
|
|
}
|
|
else
|
|
{//第一次查看此模块
|
|
List<BJCJ_INFO> partinfos = new List<BJCJ_INFO>();
|
|
partinfos.Add(partInfo);
|
|
_curYJCJCombinatehandler.Add(_ShowPartsName.Value, partinfos);
|
|
}
|
|
}
|
|
}
|
|
OnYJCJCombinateChanged?.Invoke(partInfo);
|
|
}
|
|
/// <summary>
|
|
/// 在一键拆解中清除拼合部件
|
|
/// </summary>
|
|
public void ClearYJCJCombinate()
|
|
{
|
|
_curYJCJCombinatehandler.Clear();
|
|
}
|
|
/// <summary>
|
|
/// 在原理示意中通过部件ID获取部件实体信息
|
|
/// </summary>
|
|
/// <param name="partName"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 在顺序拆解中通过部件ID获取部件实体信息
|
|
/// </summary>
|
|
/// <param name="partName"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 在顺序拆解中通过部件ID获取下一个部件实体信息
|
|
/// </summary>
|
|
/// <param name="partID"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据成绩单布局返回成绩
|
|
/// </summary>
|
|
/// <returns>[步骤名,子步骤名,总成绩,实际成绩]</returns>
|
|
public Queue<string[]> GetExamScore()
|
|
{
|
|
Queue<string[]> scoreFinish = new Queue<string[]>();
|
|
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 操作正确步骤后得分
|
|
/// </summary>
|
|
/// <param name="bigStepName">大步骤名字</param>
|
|
/// <param name="smallStepName">子步骤名字</param>
|
|
/// <param name="score">当前步骤可得分数</param>
|
|
/// <returns></returns>
|
|
public float AddScore(string bigStepName, string smallStepName, float score)
|
|
{
|
|
if (!_examScore.ContainsKey(bigStepName))
|
|
{
|
|
_examScore.Add(bigStepName, new Dictionary<string, float>());
|
|
}
|
|
if (!_examScore[bigStepName].ContainsKey(smallStepName))
|
|
{
|
|
_examScore[bigStepName].Add(smallStepName, 0);
|
|
}
|
|
_examScore[bigStepName][smallStepName] += score;
|
|
return _examScore[bigStepName][smallStepName];
|
|
}
|
|
}
|
|
} |