using System.Linq; using Newtonsoft.Json; using SC.XR.Unity.Module_InputSystem; using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.UI; using UnityEngine.XR; using Ximmerse.XR.Tag; using Newtonsoft.Json.Linq; using LitJson; /// /// 大场景生成和Tag管理 /// public class MachineRoomManager : MonoSingleton { public MachineRoomData data; public GameObject cabinetObj; public GameObject bladeServer; public bool isInit = false; public MachineRoomTagData tagData; public List listEditorTag; GameObject tagObjPoint; private List listBSItem; public TagTracking foundTracking; public GameObject cubeY; public Transform leftLine; public Transform rightLine; bool isSelect = false; private Transform selectTrigger; private Vector3 selectTOldPos; private Vector3 selectTOldRot; public bool isDataInit = false; public Transform startShowDevice; /// /// 临时创建 的tagid /// private List listTagid; /// /// 临时创建 刀片机信息 /// private DeviceParameters dp1; private DeviceParameters dp2; /// /// 机房列表 /// public List listRoomName; /// /// 在机房内的位置 /// public Transform player; public void Init() { tagObjPoint = new GameObject(); listBSItem = new List(); listRoomName = new List(); listRoomName.Add("4A-23"); listRoomName.Add("4A-24"); listRoomName.Add("4A-25"); listRoomName.Add("4A-26"); listRoomName.Add("4A-27"); listTagid = new List(); listTagid.Add(6); listTagid.Add(15); listTagid.Add(26); listTagid.Add(27); listTagid.Add(28); listTagid.Add(30); listTagid.Add(31); listTagid.Add(32); listTagid.Add(35); listTagid.Add(36); listTagid.Add(38); listTagid.Add(41); //listTagid.Add(42); //listTagid.Add(43); //listTagid.Add(44); //listTagid.Add(50); //listTagid.Add(53); //listTagid.Add(55); //listTagid.Add(58); //listTagid.Add(61); //listTagid.Add(62); //listTagid.Add(64); //listTagid.Add(31); //listTagid.Add(61); //listTagid.Add(64); //listTagid.Add(43); //listTagid.Add(3161); //listTagid.Add(3164); //listTagid.Add(4361); //listTagid.Add(4364); #region 原初始化 // //PlayerPrefs.DeleteAll(); // if (PlayerPrefs.HasKey("MachineRoomData")) // { // string msg = PlayerPrefs.GetString("MachineRoomData"); // UILogManager.Instance.text1.text = msg; // Debug.Log("MachineRoomData " + msg); // data = JsonConvert.DeserializeObject(msg); // // Debug.Log("PlayerPrefs.HasKey(MachineRoomData) "); // //data = new MachineRoomData(); // //data.line = 4; // //data.list = 3; // //data.intervalW = 1; // //data.intervalL = 2; // //data.cabinetW = 1.2f; // //data.cabinetH = 2f; // //data.bladeSeverNumber = 4; // //data.bIntervalH = 0.2f; // //data.firstBladeSeverH = 0.4f; // //data.TagOffestPosY = 0; // //data.CameraFar = 3; // //data.roomName = "4A-23"; // //data.totalCapacity = 8520; // //data.usedCapacity = 4420; // //data.totalPower = 1278; // //data.usedPower = 846.24f; // //data.totalLoadBearing = 85.2f; // //data.usedBearing = 46.83f; // } // else // { // data = new MachineRoomData(); // data.line = 4; // data.list = 3; // data.intervalW = 0.1f; // data.intervalL = 1f; // data.cabinetW = 0.6f; // data.cabinetH = 2f; // data.bladeSeverNumber = 4; // data.bIntervalH = 0.2f; // data.firstBladeSeverH = 0.4f; // data.tagOffestPosY = 1f; // data.cameraFar = 10; // data.roomName = "4A-23"; // data.totalCapacity = 8520; // data.usedCapacity = 4420; // data.totalPower = 1278; // data.usedPower = 846.24f; // data.totalLoadBearing = 85.2f; // data.usedBearing = 46.83f; // } // // data.listCabinetData = null; // data.listEquipmentData = null; // data.listTagData = null; //// PlayerPrefs.DeleteAll(); // if (PlayerPrefs.HasKey("MachineRoomTagData")) // { // string msg = PlayerPrefs.GetString("MachineRoomTagData"); // Debug.Log("MachineRoomTagData " + msg); // data.listTagData = JsonConvert.DeserializeObject>(msg); // } // else // { // data.listTagData = new List(); // MachineRoomTagData data1 = new MachineRoomTagData(); // data1.id = 65; // //data1.pos = new Vector3(4.5f, 0, 0); // data1.pos = Vector3.zero; // data1.rot = new Vector3(0, 180, 0); // data1.offestPos = Vector3.zero; // data1.offestrot = Vector3.zero; // MachineRoomTagData data4 = new MachineRoomTagData(); // data4.id = 141; // // data4.pos = new Vector3(4.5f, 2.5f, 3.7f); // data4.pos = Vector3.zero; // data4.rot = new Vector3(0, 180, 0); // data4.offestPos = Vector3.zero; // data4.offestrot = Vector3.zero; // MachineRoomTagData data5 = new MachineRoomTagData(); // data5.id = 142; // // data5.pos = new Vector3(4.5f, 2.5f, 3.7f); // data5.pos = Vector3.zero; // data5.rot = new Vector3(0, 180, 0); // data5.offestPos = Vector3.zero; // data5.offestrot = Vector3.zero; // data.listTagData.Add(data1); // data.listTagData.Add(data4); // data.listTagData.Add(data5); // } // if (PlayerPrefs.HasKey("MachineRoomCabinetData")) // { // string msg = PlayerPrefs.GetString("MachineRoomCabinetData"); // // data.listCabinetData = JsonConvert.DeserializeObject>(msg); // data.listEquipmentData = JsonConvert.DeserializeObject>(msg); // } #endregion } private void Start() { Init(); //Init(); // Init(); #if UNITY_EDITOR // Init(); #endif } public void SceneInitCallBack(string msg) { Debug.Log(msg); JObject json = JObject.Parse(msg); UILogManager.Instance.text1.text = msg; if (json["code"].ToString() == "200") { string data = json["data"]["room"].ToString(); this.data = JsonConvert.DeserializeObject(data); ShowRoomName.Instance.roomName.text = this.data.roomName; UICallManager.Instance.MachineRoomInit(); } else { Debug.LogError(" 请求场景参数出错 !!! " + HttpActionLang.sceneInit); } } public void SceneInit() { SettingMachineRoomData.Instance.Init(data); OpenXRCamera.Instance.head.GetComponent().farClipPlane = data.cameraFar; MachineInit(); // ServerInit(); UICallManager.Instance.ShowDeviceTransform(startShowDevice); isDataInit = true; } private void Update() { if (state && tagData != null) { for (int i = 0; i < listEditorTag.Count; i++) { listEditorTag[i].gameObject.SetActive(!state); if (listEditorTag[i].id == tagData.id) listEditorTag[i].gameObject.SetActive(true); } } if (tagData != null && foundTracking != null && DragManager.Instance.triggerState == TriggerState.No && !state) { tagObjPoint.transform.SetParent(foundTracking.transform); tagObjPoint.transform.localEulerAngles = new Vector3(0, tagData.offestrot == Vector3.zero ? tagData.rot.y : tagData.offestrot.y, 0); tagObjPoint.transform.localPosition = tagData.offestPos == Vector3.zero ? tagData.pos : tagData.offestPos; // Debug.Log(" MachineRoom T " + tagData.offestPos); transform.eulerAngles = new Vector3(0, tagObjPoint.transform.eulerAngles.y, 0); transform.position = new Vector3(tagObjPoint.transform.position.x, foundTracking.transform.position.y + data.tagOffestPosY, tagObjPoint.transform.position.z); } if (Input.GetKeyDown(KeyCode.L)) { OnTrackingFound(foundTracking); } } public List listObjes = new List(); public void MachineInit() { //listObjes.Clear(); //listObjes = new List(); //// 重新生成机柜组 //if(data.listEquipmentData == null||data.listEquipmentData.Count!=(data.line*data.list)) //{ // data.listEquipmentData = new List(); // for (int i = 0; i < data.line; i++) // { // for (int j = 0; j < data.list; j++) // { // MachineParameters mp1 = new MachineParameters(); // mp1.deviceId = (i * data.list + j + 1).ToString(); // mp1.tagID = -1000; // // mp1.offsetPos = new Vector3(-0.4f, 0, -0.3f); // mp1.offsetPos = Vector3.zero; // mp1.eulerAxle = 3; // mp1.deviceName = "设备" + (i * data.list + j + 1).ToString(); // mp1.carryingSystem = "承载系统1"; // mp1.deviceLocation = "4A-23机房"; // mp1.equipmentType = "机柜"; // mp1.equipmentModel = null; // mp1.factory = null; // mp1.specification = null; // mp1.listDevicesParameters = new List(); // if (int.Parse( mp1.deviceId) % 2 == 0) // mp1.listDevicesParameters.Add(dp1); // else // mp1.listDevicesParameters.Add(dp2); // data.listEquipmentData.Add(mp1); // } // } // for (int i = 0; i < listTagid.Count; i++) // { // if ((i + 1) < data.listEquipmentData.Count) // { // data.listEquipmentData[i].tagID = listTagid[i]; // } // else // break; // } //} GameObject rDataItem = Resources.Load("DataItem"); for (int i = 0; i < data.listEquipmentData.Count; i++) { GameObject obj = GameObject.Instantiate(cabinetObj, transform); obj.transform.localScale = new Vector3(data.cabinetW, data.cabinetH, obj.transform.localScale.z); // Debug.Log(data.cabinetH + " " + data.cabinetW); obj.name =i.ToString(); // Debug.Log(obj.name + " " + new Vector3(j * (data.cabinetW + data.intervalW), 0, i * data.intervalL)); obj.transform.localPosition = new Vector3((i%data.list)*(data.cabinetW + data.intervalW), 0, (i/data.list) * data.intervalL); obj.GetComponent().Setting((i / data.list) % 2 == 0); listObjes.Add(obj.GetComponent()); listObjes[i].deviceParameters = data.listEquipmentData[i]; if(data.listEquipmentData[i]!=null) { GameObject item = GameObject.Instantiate(rDataItem); DataItem dataItem = item.GetComponent(); dataItem.Init(data.listEquipmentData[i]); // item.SetActive(true); for (int j = 0; j < data.listEquipmentData[i].listDevicesParameters.Count; j++) { dataItem.SetDeviceParametersData(data.listEquipmentData[i].listDevicesParameters); } listObjes[i].dataItem = dataItem; dataItem.transform.SetParent(listObjes[i].transform); dataItem.transform.localPosition = listObjes[i].xTag.localPosition; dataItem.transform.localEulerAngles = new Vector3(0, listObjes[i].isSingle ? 180 : 0, 0); } } //Debug.Log(data.line); Vector3 leftPos = new Vector3(-1 * (data.cabinetW + data.intervalW), 0, 0); Vector3 rightPos = new Vector3((data.cabinetW * data.list + data.intervalW * data.list + data.cabinetW + data.intervalW), 0, 0); WayFindingManager.Instance.SetLine(leftPos, rightPos); SaveAllData(); isInit = true; } public IEnumerator RandomRange() { yield return 2f; int randomNum = UnityEngine.Random.Range(0, listObjes.Count-1); // WayFindingManager.Instance.SetServerItem(listObjes[randomNum].transform); List listMachineObj = new List(); for (int i = 0; i < 3; i++) { if(i("DataItem"); // for (int i = 0; i < data.listCabinetData.Count; i++) // { // if (data.listCabinetData[i].listBladeServerData == null) // continue; // for (int j = 0; j < data.listCabinetData[i].listBladeServerData.Count; j++) // { // GameObject item = GameObject.Instantiate(rDataItem); // DataItem dataItem = item.GetComponent(); // dataItem.Init(data.listCabinetData[i].listBladeServerData[j].tagID, data.listCabinetData[i].listBladeServerData[j].pos, data.listCabinetData[i].listBladeServerData[j].eulerAxle , data.listCabinetData[i].listBladeServerData[j], data.listCabinetData[i].listBladeServerData[j].width, data.listCabinetData[i].listBladeServerData[j].heigth); // } // } if (data.listEquipmentData == null) return; GameObject rDataItem = Resources.Load("DataItem"); for (int i = 0; i < data.listEquipmentData.Count; i++) { GameObject item = GameObject.Instantiate(rDataItem); DataItem dataItem = item.GetComponent(); dataItem.Init(data.listEquipmentData[i]); // item.SetActive(true); for (int j = 0; j < data.listEquipmentData[i].listDevicesParameters.Count;j++) { dataItem.SetDeviceParametersData(data.listEquipmentData[i].listDevicesParameters); } } } public void SettingMachine( ) { if (listObjes != null) { for (int i = 0; i < listObjes.Count; i++) { listObjes[i].gameObject.SetActive(false); } listObjes.Clear(); listObjes = new List(); } if(BladeServerManager.Instance.listTagTracking!=null) { for (int i = 0; i < BladeServerManager.Instance.listTagTracking.Count; i++) { BladeServerManager.Instance.listTagTracking[i].gameObject.SetActive(false); } BladeServerManager.Instance.listTagTracking.Clear(); } //data.listEquipmentData = new List(); //for (int i = 0; i < data.line; i++) //{ // for (int j = 0; j < data.list; j++) // { // MachineParameters mp1 = new MachineParameters(); // mp1.deviceId = (i * data.list + j + 1).ToString(); // mp1.tagID = -1000; // mp1.offsetPos = new Vector3(0f, 0, 0f); // mp1.eulerAxle = 3; // mp1.deviceName = "设备" + (i * data.list + j + 1).ToString(); // mp1.carryingSystem = "承载系统1"; // mp1.deviceLocation = "4A-23机房"; // mp1.equipmentType = "机柜"; // mp1.equipmentModel = null; // mp1.factory = null; // mp1.specification = null; // mp1.listDevicesParameters = new List(); // if (int.Parse( mp1.deviceId) % 2 == 0) // mp1.listDevicesParameters.Add(dp1); // else // mp1.listDevicesParameters.Add(dp2); // data.listEquipmentData.Add(mp1); // } //} //Debug.Log(data.line); //for (int i = 0; i < listTagid.Count; i++) //{ // if (data.listEquipmentData.Count < (i + 1)) // { // Debug.Log("a "+listTagid); // Debug.Log(data.listEquipmentData[i].tagID); // data.listEquipmentData[i].tagID = listTagid[i]; // } //} //for (int i = 0; i < data.listEquipmentData.Count; i++) //{ // GameObject obj = GameObject.Instantiate(cabinetObj, transform); // obj.transform.localScale = new Vector3(data.cabinetW, data.cabinetH, obj.transform.localScale.z); // Debug.Log(data.cabinetH + " " + data.cabinetW); // obj.name = data.listEquipmentData[i].deviceName; // // Debug.Log(obj.name + " " + new Vector3(j * (data.cabinetW + data.intervalW), 0, i * data.intervalL)); // obj.transform.localPosition = new Vector3((i % data.line) * (data.cabinetW + data.intervalW), 0, i * data.intervalL); // obj.GetComponent().Setting((i % data.line) % 2 == 0); // listObjes.Add(obj.GetComponent()); // listObjes[i].deviceParameters = data.listEquipmentData[i]; //} //Vector3 leftPos = new Vector3(-1 * (data.cabinetW + data.intervalW), 0, 0); //Vector3 rightPos = new Vector3((data.cabinetW * data.list + data.intervalW * data.list), 0, 0); //WayFindingManager.Instance.SetLine(leftPos, rightPos); GameObject rDataItem = Resources.Load("DataItem"); for (int i = 0; i < data.listEquipmentData.Count; i++) { GameObject obj = GameObject.Instantiate(cabinetObj, transform); obj.transform.localScale = new Vector3(data.cabinetW, data.cabinetH, obj.transform.localScale.z); Debug.Log(data.cabinetH + " " + data.cabinetW); obj.name = data.listEquipmentData[i].deviceName; // Debug.Log(obj.name + " " + new Vector3(j * (data.cabinetW + data.intervalW), 0, i * data.intervalL)); obj.transform.localPosition = new Vector3((i % data.line) * (data.cabinetW + data.intervalW), 0, (i / data.line) * data.intervalL); obj.GetComponent().Setting((i / data.line) % 2 == 0); listObjes.Add(obj.GetComponent()); listObjes[i].deviceParameters = data.listEquipmentData[i]; GameObject item = GameObject.Instantiate(rDataItem); DataItem dataItem = item.GetComponent(); dataItem.Init(data.listEquipmentData[i]); // item.SetActive(true); for (int j = 0; j < data.listEquipmentData[i].listDevicesParameters.Count; j++) { dataItem.SetDeviceParametersData(data.listEquipmentData[i].listDevicesParameters); } listObjes[i].dataItem = dataItem; dataItem.transform.SetParent(listObjes[i].transform); dataItem.transform.localPosition = listObjes[i].xTag.localPosition; dataItem.transform.localEulerAngles = new Vector3(0, listObjes[i].isSingle ? 180 : 0, 0); } //Debug.Log(data.line); Vector3 leftPos = new Vector3(-1 * (data.cabinetW + data.intervalW), 0, 0); Vector3 rightPos = new Vector3((data.cabinetW * data.list + data.intervalW * data.list + data.cabinetW + data.intervalW), 0, 0); WayFindingManager.Instance.SetLine(leftPos, rightPos); SaveAllData(); isInit = true; } public void SettingCameraFar() { OpenXRCamera.Instance.head.GetComponent().farClipPlane = data.cameraFar; } public void OnTrackingFirst(TagTracking tracking) { if(isDataInit) QueryTagData(tracking); } public void OnTrackingStay(TagTracking tracking) { } public void OnTrackingFound(TagTracking tracking) { // UILogManager.Instance.SendLogText(2, tracking.TrackId.ToString()); if (isDataInit) QueryTagData(tracking); } public void OnTrackingLost(TagTracking tracking) { if (isDataInit) { if (foundTracking == tracking) foundTracking = null; } } private void QueryTagData( TagTracking tracking) { if (isDataInit) { foundTracking = tracking; tagData = null; Debug.Log("DGJ ===> QueryTagData" + data.listTagData.Count); for (int i = 0; i < data.listTagData.Count; i++) { if (data.listTagData[i].id == tracking.TrackId) { tagData = data.listTagData[i]; SynPlayerTransform.Instance.transform.SetParent(tracking.transform); break; } } } //if (state) //{ // for (int i = 0; i < listEditorTag.Count; i++) // { // listEditorTag[i].gameObject.SetActive(!state); // if (listEditorTag[i].id == tracking.TrackId) // listEditorTag[i].gameObject.SetActive(true); // } //} } bool state = false; public void EditorTag(Text text) { text.text = state ? "打开" : "关闭"; text.text += "场景编辑"; state = !state; DragManager.Instance.state = state; cubeY.SetActive(state); for (int i = 0; i < listObjes.Count; i++) { listObjes[i].MeshState(state); } if (!state && foundTracking!=null) { for (int i = 0; i < listEditorTag.Count; i++) { listEditorTag[i].gameObject.SetActive(state); } for (int i = 0; i < data.listTagData.Count; i++) { //data.listTagData[i].offestPos = data.listTagData[i].tagModel.localPosition; //data.listTagData[i].offestrot = data.listTagData[i].tagModel.localEulerAngles; for (int j = 0; j < listEditorTag.Count; j++) { if (listEditorTag[j].id == data.listTagData[i].id) { //data.listTagData[i].offestPos+= listEditorTag[j].transform.localPosition; //data.listTagData[i].offestrot+= listEditorTag[j].transform.localEulerAngles; transform.SetParent(listEditorTag[j].transform.parent); data.listTagData[i].offestPos = transform.localPosition; data.listTagData[i].offestrot = transform.localEulerAngles; transform.parent = null; Debug.Log("DGJ ===> 保存 Tag " + listEditorTag[j].id); } } } UpdataTagData tagData = new UpdataTagData(); tagData.listTagData = data.listTagData; string jsonDate = JsonConvert.SerializeObject(tagData); Debug.Log(jsonDate); HttpTool.Instance.Post(HttpActionLang.updateTag, jsonDate, UpdateTagCallBack); selectTOldPos = Vector3.zero; selectTOldRot = Vector3.zero; DragManager.Instance.triggerState = TriggerState.No; selectTrigger = null; } if(!state) { SaveAllData(); } } private void UpdateTagCallBack(string msg) { Debug.Log(msg); JObject json = JObject.Parse(msg); if (json["code"].ToString() == "200") { Debug.Log(" 更新场景Tag参数成功 "); } else { Debug.LogError(" 更新场景Tag参数出错 !!! " + HttpActionLang.updateCabinet); } } public void SaveAllData() { PlayerPrefs.SetString("MachineRoomTagData", JsonConvert.SerializeObject(data.listTagData)); PlayerPrefs.SetString("MachineRoomCabinetData", JsonConvert.SerializeObject(data.listEquipmentData)); PlayerPrefs.SetString("MachineRoomData", JsonConvert.SerializeObject(data)); Debug.Log(" 保存成功 " + JsonConvert.SerializeObject(data)); } private void SaveData() { if(data!=null) { string _str = JsonConvert.SerializeObject(data); System.IO.Directory.CreateDirectory(Application.persistentDataPath+"/Data"); string NowTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").Replace(" ", "_").Replace("/", "_").Replace(":", "_"); Debug.Log(Application.persistentDataPath + "/Data"); using (System.IO.StreamWriter writer = System.IO.File.CreateText(Application.persistentDataPath + "/Data" + "/"+ NowTime + "_data.txt")) { writer.Write(_str); //writer. } //UnityEditor.AssetDatabase.Refresh(); } } private void OnDisable() { //PlayerPrefs.SetString("MachineRoomTagData", JsonConvert.SerializeObject(data.listTagData)); //PlayerPrefs.SetString("MachineRoomCabinetData", JsonConvert.SerializeObject(data.listEquipmentData)); //PlayerPrefs.SetString("MachineRoomData", JsonConvert.SerializeObject(data)); // SaveData(); } } public class UpdataTagData { public UpdataTagData() { listTagData = new List(); } public List listTagData { get; set; } }