GQ_Communicate/GQ_URP/GQ/Assets/script/设备信息/Device.cs

196 lines
5.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using UnityEngine;
/// <summary>
/// 挂载设备
/// </summary>
public class Device : MonoBehaviour
{
public DeviceInfor mydata;
public bool isPut = false;
//[ContextMenu("添加端口信息脚本")]
//public void addscript()
//{
// //添加端口信息脚本
// for (int i = 0; i < transform.childCount; i++)
// {
// var go = transform.GetChild(i);
// mydata.ports.Add(go);
// if (!go.GetComponent<LineInfor>()) go.AddComponent<LineInfor>();
// if (!go.GetComponent<PortQuery>()) go.AddComponent<PortQuery>();
// }
//}
// Start is called before the first frame update
private void Awake()
{
}
void Start()
{
}
// Update is called once per frame
void Update()
{
//if (isPut)
//{
// isPut = false;
// refreshMyID();
// LineInforChecker();
// //自己的设备JSON
// var myjson = refreshJson();
// //更新设备JSON
// string machineID = string.Format("{0}-{1}-{2}", mydata.area, mydata.row, mydata.tier);
// lock (CombineJSON.jsonsDic)
// {
// if (CombineJSON.jsonsDic.ContainsKey(machineID))
// {
// CombineJSON.jsonsDic.Remove(machineID);
// CombineJSON.jsonsDic.Add(machineID, myjson);
// }
// else CombineJSON.jsonsDic.Add(machineID, myjson);
// }
//}
}
/// <summary>
/// 生成所有设备JSON
/// </summary>
[ContextMenu("生成所有设备JSON")]
public void AllDeviceJson()
{
string AllDeviceJson = CombineJSON.GetCombineJSON();
Debug.Log(AllDeviceJson);
}
///// <summary>
///// 刷新自己名字
///// </summary>
//void refreshMyID()
//{
// for (int i = 0; i < mydata.ports.Count; i++)
// {
// var po = mydata.ports[i].GetComponent<PortQuery>();
// var li = mydata.ports[i].GetComponent<LineInfor>();
// li.root.myID = string.Format("{0}-{1}-{2}-{3}", mydata.area, mydata.row, mydata.tier, i + 1);
// li.transform.name = li.root.myID;
// }
//}
///// <summary>
///// 更新该设备下所有端口信息JSON
///// </summary>
//string refreshJson()
//{
// List<List<string>> strings = new List<List<string>>();
// var _line = GetComponentsInChildren<LineInfor>().ToList();
// for (int i = 0; i < _line.Count; i++)
// {
// var line = new List<string>();
// line.Add(_line[i].root.myID);
// line.Add(_line[i].root.otherID);
// line.Add(_line[i].root.lineUID);
// strings.Add(line);
// }
// DeviceInfor person = new DeviceInfor();
// person.devtype = mydata.devtype;
// person.ports = null;
// person.area = mydata.area;
// person.row = mydata.row;
// person.tier = mydata.tier;
// person.lineInfors = new List<List<string>>(strings);
// string json = JsonConvert.SerializeObject(person);
// //Debug.Log(json);
// return json;
//}
/// <summary>
/// 遍历相同lineUID的物体
/// </summary>
/// <param name="uid">寻找具体某一UID</param>
void LineInforChecker(string uid = null)
{
bool isfind = false;
LineInfor[] lineInfors = FindObjectsOfType<LineInfor>();
//记录相同lineUID
Dictionary<string, List<LineInfor>> lineUIDDict = new Dictionary<string, List<LineInfor>>();
foreach (var item in lineInfors)
{
if (string.IsNullOrEmpty(item.root.lineUID)) continue;
// 判断lineUID是否存在于字典中
if (lineUIDDict.ContainsKey(item.root.lineUID))
{
lineUIDDict[item.root.lineUID].Add(item);
}
else
{
List<LineInfor> newList = new List<LineInfor>();
newList.Add(item);
lineUIDDict.Add(item.root.lineUID, newList);
}
}
// 输出相同lineUID
foreach (var item in lineUIDDict)
{
if (item.Value.Count > 1)
{
//查找特定的GUID
if (uid != null)
{
if (item.Key == uid)
{
isfind = true;
Debug.Log(string.Format
("lineUID: {0},GameA Name: {1},GameB Name: {2}", item.Key, item.Value[0].root.myID, item.Value[1].root.myID));
refreshLineInfor(item.Key, item.Value[0], item.Value[1]);
break;
}
}
//遍历
else
{
isfind = true;
Debug.Log(string.Format
("lineUID: {0},GameA Name: {1},GameB Name: {2}", item.Key, item.Value[0].root.myID, item.Value[1].root.myID));
refreshLineInfor(item.Key, item.Value[0], item.Value[1]);
}
}
}
if (!isfind) Debug.Log("无匹配端口UID");
}
/// <summary>
/// 刷新端口线条信息
/// </summary>
public void refreshLineInfor(string GUID, LineInfor A, LineInfor B)
{
A.root.lineUID = GUID;
B.root.lineUID = GUID;
A.root.otherID = B.root.myID;
if (string.IsNullOrEmpty(B.root.otherID))
{
B.root.otherID = A.root.myID;
//更新B端口的设备下所有端口信息
var DeviceB = B.transform.parent.GetComponent<Device>();
if (DeviceB != null)
{
DeviceB.isPut = true;
}
}
}
}