using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
using System.IO;
using System.Linq;
///
/// 数据管理类
///
public class DataManager : BaseManager
{
private DataManager()
{
}
///
/// 系统科目配置数据
///
public D_System d_System;
/////
///// 方案
/////
//private Dictionary schemeDic = new Dictionary();
/////
///// 流程
/////
//private Dictionary processDic = new Dictionary();
/////
///// 子流程
/////
//private Dictionary subProcessDic = new Dictionary();
/////
///// 子流程步骤
/////
//private Dictionary subProcessStepDic = new Dictionary();
/////
///// 虚拟仿真系统
/////
//private Dictionary systemDic = new Dictionary();
///
/// 设备类型
///
private Dictionary deviceTypeDic = new Dictionary();
///
/// 工具材料
///
private Dictionary toolAndMaterialDic = new Dictionary();
///
/// 初始化
///
public void Init()
{
//设备类型
ReadDeviceType(Application.streamingAssetsPath+ "/Setting/设备类型.xml");
//工具材料
ReadToolAndMaterial(Application.streamingAssetsPath + "/Setting/工具材料.xml");
//科目
Directory.GetFiles(Application.streamingAssetsPath + "/Setting/科目").ToList().ForEach(a =>
{
if(Path.GetExtension(a)==".xml")
ReadSubecjtXML(a);
});
//schemeDic = GameManager.BinaryMgr.GetTable().dataDic;
//processDic = GameManager.BinaryMgr.GetTable().dataDic;
//subProcessDic = GameManager.BinaryMgr.GetTable().dataDic;
//subProcessStepDic = GameManager.BinaryMgr.GetTable().dataDic;
//systemDic = GameManager.BinaryMgr.GetTable().dataDic;
//deviceTypeDic = GameManager.BinaryMgr.GetTable().dataDic;
//toolAndMaterialDic = GameManager.BinaryMgr.GetTable().dataDic;
}
private void ReadDeviceType(string path)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
var nodes = xmlDoc.SelectNodes("root/DeviceType");
foreach (XmlNode node in nodes)
{
TB_DeviceType tB_DeviceType = new TB_DeviceType();
tB_DeviceType.id = int.Parse(node.Attributes["id"].Value);
tB_DeviceType.deviceTypeName = node.Attributes["deviceTypeName"].Value;
deviceTypeDic.Add(tB_DeviceType.id, tB_DeviceType);
}
}
private void ReadToolAndMaterial(string path)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
var nodes=xmlDoc.SelectNodes("root/ToolMaterial");
foreach (XmlNode node in nodes)
{
TB_ToolAndMaterial tB_ToolAndMaterial = new TB_ToolAndMaterial();
tB_ToolAndMaterial.id= int.Parse(node.Attributes["id"].Value);
tB_ToolAndMaterial.objName = node.Attributes["objName"].Value;
tB_ToolAndMaterial.type= int.Parse(node.Attributes["type"].Value);
toolAndMaterialDic.Add(tB_ToolAndMaterial.id, tB_ToolAndMaterial);
}
}
private void ReadSubecjtXML(string path)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
//系统
XmlNode sysnode = xmlDoc.SelectSingleNode("TB_System");
d_System = new D_System();
d_System.id = int.Parse(sysnode.Attributes["id"].Value);
d_System.systemName = sysnode.Attributes["systemName"].Value;
d_System.loadName = sysnode.Attributes["loadName"].Value;
d_System.titleName = sysnode.Attributes["titleName"].Value;
//检索不同科目文件
//科目
XmlNode subjectnode = xmlDoc.SelectSingleNode("TB_System/Subject");
D_Scheme subject = new D_Scheme();
subject.id = int.Parse(subjectnode.Attributes["id"].Value);
subject.deviceTypeId = int.Parse(subjectnode.Attributes["deviceTypeId"].Value);
subject.schemeName = subjectnode.Attributes["schemeName"].Value;
subject.deviceMap = subjectnode.Attributes["deviceMap"].Value;
//subject.schemeDes = subjectnode.Attributes["schemeDes"].Value;
subject.ToolOrMaterilOrDevice = subjectnode.Attributes["ToolOrMaterilOrDevice"].Value;
d_System.subjects.Add(subject);
//流程
int processindex = 1;
int stepindex=1;
int operationIndex = 1;
var processNodes = xmlDoc.SelectNodes("TB_System/Subject/Process");
foreach (XmlNode processNode in processNodes)
{
D_Process process = new D_Process();
process.schemeId = subject.id;
process.processName = processNode.Attributes["processName"].Value;
//process.processDes = processNode.Attributes["processDes"].Value;
subject.processes.Add(process);
//process.id = subject.processes.IndexOf(process)+1;
process.id = processindex;
processindex++;
//步骤
foreach (XmlNode stepNode in processNode.ChildNodes)
{
D_SubProcess step = new D_SubProcess();
step.processId = process.id;
step.schemeId = subject.id;
step.subProcessName = stepNode.Attributes["subProcessName"].Value;
//step.tipTitle = stepNode.Attributes["tipTitle"].Value;
step.tips = stepNode.Attributes["tips"].Value;
//step.precondition= stepNode.Attributes["precondition"].Value;
//step.isPrecondition= bool.Parse(stepNode.Attributes["isPrecondition"].Value);
process.subProcesses.Add(step);
//step.id = process.subProcesses.IndexOf(step)+1;
step.id = stepindex;
stepindex++;
foreach (XmlNode operationNode in stepNode.ChildNodes)
{
//操作
D_SubProcessStep operation = new D_SubProcessStep();
operation.processId = process.id;
operation.schemeId = subject.id;
operation.subProcessStepName = operationNode.Attributes["subProcessStepName"].Value;
operation.triggerID = operationNode.Attributes["triggerID"].Value;
operation.tipTitle = operationNode.Attributes["tipTitle"].Value;
operation.precondition = operationNode.Attributes["precondition"].Value;
//operation.isPrecondition = bool.Parse(operationNode.Attributes["isPrecondition"].Value);
step.subProcessStepes.Add(operation);
operation.id = operationIndex;
operationIndex++;
//operation.id = step.subProcessStepes.IndexOf(operation) + 1;
}
}
}
}
public Dictionary GetAllDeviceTypes()
{
return deviceTypeDic;
}
///
/// 获取当前系统所有的方案
///
///
public List GetAllSchemeName()
{
return d_System.subjects;
//var allSchemeList = new List();
//foreach (var item in schemeDic.Values)
//{
// if (item.systemId == GameManager.Instance.systemId)
// allSchemeList.Add(item);
//}
//return allSchemeList;
}
///
/// 根据方案 ToolOrMaterilOrDevice 获取当前系统全部工器具和材料
///
///
public List GetCurrentSystemToolAndMaterials(string tOrMOrD)
{
var currentSystemToolAndMaterials = new List();
string[] tmdTemp = tOrMOrD.Split(',');
for (int i = 0; i < tmdTemp.Length; i++)
{
int index = i;
foreach (var item in toolAndMaterialDic.Values)
{
if (item.id == int.Parse(tmdTemp[index]))
{
D_ToolAndMaterialData d_ToolAndMaterialData = new D_ToolAndMaterialData();
d_ToolAndMaterialData.id = item.id;
d_ToolAndMaterialData.objName = item.objName;
d_ToolAndMaterialData.type = item.type;
d_ToolAndMaterialData.prefabName = item.prefabName;
d_ToolAndMaterialData.iconSpriteName = item.iconSpriteName;
currentSystemToolAndMaterials.Add(d_ToolAndMaterialData);
}
}
}
return currentSystemToolAndMaterials;
}
///
/// 获取D_Scheme
///
///
///
public D_Scheme GetSchemeData(int id)
{
return d_System.subjects.Find(x => x.id == id);
//D_Scheme d_Scheme = new D_Scheme();
////获取方案数据
//if (schemeDic.ContainsKey(id))
//{
// d_Scheme.id = schemeDic[id].id;
// d_Scheme.schemeName = schemeDic[id].schemeName;
// d_Scheme.ToolOrMaterilOrDevice = schemeDic[id].ToolOrMaterilOrDevice;
//}
//d_Scheme.processes = GetD_Processes(d_Scheme.id);
//return d_Scheme;
}
#region 老的读取
/////
///// 根据方案Id 获取流程列表
/////
/////
/////
//private List GetD_Processes(int schemeId)
//{
// List d_Processes = new List();
// //获取方案流程数据
// foreach (var item in processDic.Values)
// {
// if (item.schemeId == schemeId)
// {
// D_Process d_Process = new D_Process();
// d_Process.id = item.id;
// d_Process.processName = item.processName;
// int processId = item.id;
// d_Process.subProcesses = GetD_SubProcesses(schemeId, processId);
// d_Processes.Add(d_Process);
// }
// }
// return d_Processes;
//}
/////
///// 根据方案Id,流程Id ,获取子流程列表
/////
/////
/////
/////
//public List GetD_SubProcesses(int schemeId, int processId)
//{
// List d_SubProcesses = new List();
// foreach (var item in subProcessDic.Values)
// {
// if (item.schemeId == schemeId && item.processId == processId)
// {
// D_SubProcess d_SubProcess = new D_SubProcess();
// d_SubProcess.id = item.id;
// d_SubProcess.schemeId = item.schemeId;
// d_SubProcess.processId = item.processId;
// d_SubProcess.subProcessName = item.subProcessName;
// d_SubProcess.isPrecondition = item.isPrecondition;
// d_SubProcess.precondition = item.precondition;
// d_SubProcess.tips = item.tips;
// int subProcessId = item.id;
// d_SubProcess.subProcessStepes = GetD_SubProcessSteps(schemeId, processId, subProcessId);
// d_SubProcesses.Add(d_SubProcess);
// }
// }
// return d_SubProcesses;
//}
/////
///// 根据方案Id,流程Id,子流程Id 获取子流程步骤列表
/////
/////
/////
/////
/////
//private List GetD_SubProcessSteps(int schemeId, int processId, int subProcessId)
//{
// List d_SubProcessSteps = new List();
// foreach (var step in subProcessStepDic.Values)
// {
// if (step.schemeId == schemeId && step.processId == processId && step.subProcessId == subProcessId)
// {
// D_SubProcessStep d_SubProcessStep = new D_SubProcessStep();
// d_SubProcessStep.id = step.id;
// d_SubProcessStep.schemeId = step.schemeId;
// d_SubProcessStep.processId = step.processId;
// d_SubProcessStep.subProcessId = step.subProcessId;
// d_SubProcessStep.subProcessStepName = step.subProcessStepName;
// d_SubProcessStep.isPrecondition = step.isPrecondition;
// d_SubProcessStep.precondition = step.precondition;
// d_SubProcessStep.triggerID = step.triggerID;
// d_SubProcessStep.tipTitle = step.tipTitle;
// d_SubProcessStep.score = step.score;
// d_SubProcessSteps.Add(d_SubProcessStep);
// }
// }
// return d_SubProcessSteps;
//}
//public List GetSubProcessStepIDByTriggerID(int triggerID)
//{
// List tb_subProcesssSteps = new List();
// List stepIDsTemp = new List();
// foreach (var item in subProcessStepDic.Values)
// {
// if (item.schemeId == GameManager.ProcessMgr.schemeID)
// tb_subProcesssSteps.Add(item);
// }
// foreach (var item in tb_subProcesssSteps)
// {
// if (string.IsNullOrEmpty(item.triggerID))
// {
// continue;
// }
// string[] subProcessStepToolID = item.triggerID.Split(',');
// for (int i = 0; i < subProcessStepToolID.Length; i++)
// {
// if (int.Parse(subProcessStepToolID[i]) == triggerID)
// stepIDsTemp.Add(item.id);
// }
// }
// return stepIDsTemp;
//}
#endregion
///
/// 根据系统Id 获取系统信息
///
///
///
public D_System GetSystemInfo(int systemId)
{
return d_System;
//if (systemDic.ContainsKey(systemId))
//{
// return systemDic[systemId];
//}
//return null;
}
///
/// 获取报告
///
///
public R_Scheme GetSchemeReport(int id)
{
R_Scheme r_Scheme = new R_Scheme();
return r_Scheme;
}
///
///
///
///
///
//public TB_Scheme GetTitleSpriteName(int id)
//{
// if (schemeDic.ContainsKey(id))
// {
// return schemeDic[id];
// }
// return null;
//}
}