using Blue; using LitJson; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SC.XR.Unity; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; public class DataManager : SingletonMono<DataManager> { /// <summary> /// 当前账号下所有场景信息 /// </summary> private List<SceneValue> m_SceneData; /// <summary> /// 当前场景数据 /// </summary> private SceneValue m_CurrentSceen; /// <summary> /// 当前场景ID /// </summary> private int m_ProjectID; /// <summary> /// 当前场景的所有景点 /// </summary> private List<SpoitValue> m_Spoits; /// <summary> /// 场景所对应的物体 /// </summary> private Dictionary<string, ObjectValue> m_SpoitObjs; /// <summary> /// Web端素材库 /// </summary> private Dictionary<string, List<MaterialObl>> m_AllMaterials; public bool IsSavedData { get; set; } public List<SceneValue> SceneData { get { return m_SceneData; } set { m_SceneData = value; } } public SceneValue CurrentScene { get { return m_CurrentSceen; } set { m_CurrentSceen = value; } } public int ProjectID { get { return m_ProjectID; } set { m_ProjectID = value; } } public List<SpoitValue> Spoits { get { return m_Spoits; } set { m_Spoits = value; } } public Dictionary<string, List<MaterialObl>> AllMaterials { get { return m_AllMaterials; } set { m_AllMaterials = value; } } public void Awake() { IsSavedData = false; m_SpoitObjs = new Dictionary<string, ObjectValue>(); m_SceneData = new List<SceneValue>(); m_Spoits = new List<SpoitValue>(); m_AllMaterials = new Dictionary<string, List<MaterialObl>>(); } /// <summary> /// 获取景点属性 /// </summary> /// <param name="spoitName">景点名称</param> public SpoitValue GetSpoitValue(string spoitName) { SpoitValue spoit = null; for (int i = 0; i < m_Spoits.Count; i++) { if (m_Spoits[i].name == spoitName) { spoit = m_Spoits[i]; break; } } return spoit; } /// <summary> /// 改变当前场景中的景点信息 /// </summary> /// <param name="value">景点数据</param> public void ChangeSpoitValue(SpoitValue value) { for (int i = 0; i < m_Spoits.Count; i++) { if (value.name == m_Spoits[i].name) { m_Spoits[i] = value; } } } /// <summary> /// 获取当前景点所对应的物体 /// </summary> /// <param name="spoitName">景点名称</param> /// <returns></returns> public ObjectValue GetSpoitObj(string spoitName) { return m_SpoitObjs[spoitName]; } public void SaveSpoits() { UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.SaveSpoitData); Spoits = GameManager.Instance.SpoitValues; List<SendSaveData> saveData = new List<SendSaveData>(); for (int i = 0; i < Spoits.Count; i++) { var spoit = Spoits[i]; SendSaveData data = new SendSaveData(); data.id = spoit.id; data.name = spoit.name; data.projectId = ProjectID; data.material = spoit.material; data.spoittf = spoit.spoitTf; data.triggerRange = spoit.SpoitTransform[0]; saveData.Add(data); } string sendData = JsonConvert.SerializeObject(saveData); Debug.Log("更新景点数据: " + sendData); HttpTool.Instance.PostTest("/viewpoint/update", sendData, SaveCallBack); //string str = JsonMapper.ToJson(Spoits); FileManager.WriteFile(sendData, Application.persistentDataPath + "/a.json"); //Debug.Log(str); } private void SaveCallBack(string message) { if (message == "UnityWebRequest Error") { InstantiateCommand Command= new InstantiateCommand( InstantiateSystem.Instance.BlueObject.WarningPopUp, InstantiateSystem.Instance.BlueObject.NetErrorText); CommandSystem.Instance.Send(Command); return; } Debug.Log("SaveCallBack: " + message); JObject jObject = JObject.Parse(message); string str = jObject["message"].ToString(); if(str!="更新成功") { InstantiateCommand Command =new InstantiateCommand( InstantiateSystem.Instance.BlueObject.WarningPopUp, InstantiateSystem.Instance.BlueObject.NetErrorText); CommandSystem.Instance.Send(Command); return; } UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.SaveSpoitDataEnd); ((LoadingPanel)UIManager.Instance.GetUI(UINameConfig.LoadingPanel)).TextStr = str; } private void OnApplicationQuit() { //if (!IsSavedData) //{ // SaveSpoits(); //} } } public class SendSaveAnchor { public int id { get; set; } public ObjectTransform objectTransform { get; set; } } public class sspos { public float x; public float y; public float z; } public class SendSaveDataNew { public List<sspos> position; /// <summary> /// 景点ID /// </summary> public int id; /// <summary> /// 景点名称 /// </summary> public string name { get; set; } /// <summary> /// 场景id /// </summary> public int projectId; /// <summary> /// 素材 /// </summary> public List<MaterialOblNew> material { get; set; } /// <summary> /// 坐标 旋转 尺寸 如果没有数据的话默认为NULL /// </summary> public ObjectTransform spoittf { get; set; } /// <summary> /// 触发范围 /// </summary> public SpoitPos triggerRange { get; set; } public int triggerImageId; } public class SendSaveData { public List<SpoitPos> position { get; set; } public int triggerImageId { get; set; } /// <summary> /// 景点ID /// </summary> public int id; /// <summary> /// 景点名称 /// </summary> public string name { get; set; } /// <summary> /// 场景id /// </summary> public int projectId; /// <summary> /// 素材 /// </summary> public List<MaterialObl> material { get; set; } /// <summary> /// 坐标 旋转 尺寸 如果没有数据的话默认为NULL /// </summary> public ObjectTransform spoittf { get; set; } /// <summary> /// 触发范围 /// </summary> public SpoitPos triggerRange { get; set; } }