UIEditorPanel.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using Blue;
  5. using LitJson;
  6. using Newtonsoft.Json;
  7. using Newtonsoft.Json.Linq;
  8. using UnityEngine;
  9. using UnityEngine.Assertions.Must;
  10. using UnityEngine.UI;
  11. public class UIEditorPanel : AbstractController, EventObserver
  12. {
  13. public event Action<GameObject> OnClickRemoveBtn;
  14. [SerializeField] private Button UCBtn;
  15. [SerializeField] private Button TicBtn;
  16. [SerializeField] private Button RemoveBtn;
  17. [SerializeField] private Image UCElenemt;
  18. [SerializeField] private Button AddSize;
  19. [SerializeField] private Button SubSize;
  20. [SerializeField] private Button SubY;
  21. [SerializeField] private Button AddY;
  22. [SerializeField] private Button SubX;
  23. [SerializeField] private Button AddX;
  24. [SerializeField] private SCButton SubRot;
  25. [SerializeField] private SCButton AddRot;
  26. [SerializeField] private Image TicElenemt;
  27. [SerializeField] private Button ADDXBtn;
  28. [SerializeField] private Button SubXBtn;
  29. [SerializeField] private Button ADDYBtn;
  30. [SerializeField] private Button SubYBtn;
  31. [SerializeField] private Button AddZBtn;
  32. [SerializeField] private Button SubZBtn;
  33. [SerializeField] private Button InitiativeBtn;
  34. [SerializeField] private Button RevocationBtn;
  35. [SerializeField] private Button SaveBtn;
  36. private Transform MaterialObj;
  37. /// <summary>
  38. /// 当前物体移动旋转缩放的操作步骤
  39. /// </summary>
  40. private List<objectData> listAlter;
  41. /// <summary>
  42. /// 当前景点信息
  43. /// </summary>
  44. private SpoitValue listSpoits;
  45. private void Awake()
  46. {
  47. InitEvent();
  48. MaterialObj = null;
  49. listAlter = new List<objectData>();
  50. listSpoits = new SpoitValue();
  51. EventManager.Instance.Register(this, EventID.EVENT_1);
  52. }
  53. public void Init()
  54. {
  55. }
  56. private void InitEvent()
  57. {
  58. UCBtn.onClick.AddListener(() =>
  59. {
  60. if (UCElenemt.gameObject.activeSelf)
  61. return;
  62. UCElenemt.gameObject.SetActive(true);
  63. TicElenemt.gameObject.SetActive(false);
  64. });
  65. TicBtn.onClick.AddListener(() =>
  66. {
  67. if (TicElenemt.gameObject.activeSelf)
  68. return;
  69. UCElenemt.gameObject.SetActive(false);
  70. TicElenemt.gameObject.SetActive(true);
  71. });
  72. RemoveBtn.onClick.AddListener(() =>
  73. {
  74. if (MaterialObj == null)
  75. return;
  76. if (MaterialObj.tag == "TriggerBox")
  77. return;
  78. if (OnClickRemoveBtn != null)
  79. {
  80. OnClickRemoveBtn(MaterialObj.gameObject);
  81. }
  82. });
  83. //RemoveBtn.gameObject.SetActive(false);
  84. AddSize.onClick.AddListener(() =>
  85. {
  86. if (MaterialObj == null)
  87. return;
  88. SaveAlter();
  89. MaterialObj.localScale += new Vector3(MaterialObj.localScale.x / 10.0f, MaterialObj.localScale.y / 10.0f, MaterialObj.localScale.z / 10.0f);
  90. });
  91. SubSize.onClick.AddListener(() =>
  92. {
  93. if (MaterialObj == null)
  94. return;
  95. SaveAlter();
  96. MaterialObj.localScale -= new Vector3(MaterialObj.localScale.x / 10.0f, MaterialObj.localScale.y / 10.0f, MaterialObj.localScale.z / 10.0f);
  97. });
  98. AddRot.onClick.AddListener(() =>
  99. {
  100. if (MaterialObj == null)
  101. return;
  102. SaveAlter();
  103. MaterialObj.localEulerAngles += new Vector3(0, 10, 0);
  104. });
  105. SubRot.onClick.AddListener(() =>
  106. {
  107. if (MaterialObj == null)
  108. return;
  109. SaveAlter();
  110. MaterialObj.localEulerAngles -= new Vector3(0, 10, 0);
  111. });
  112. AddX.onClick.AddListener(() =>
  113. {
  114. if (MaterialObj == null)
  115. return;
  116. SaveAlter();
  117. MaterialObj.localPosition -= new Vector3(0.1f, 0, 0);
  118. });
  119. SubX.onClick.AddListener(() =>
  120. {
  121. if (MaterialObj == null)
  122. return;
  123. SaveAlter();
  124. MaterialObj.localPosition += new Vector3(0.1f, 0, 0);
  125. });
  126. AddY.onClick.AddListener(() =>
  127. {
  128. if (MaterialObj == null)
  129. return;
  130. SaveAlter();
  131. MaterialObj.localPosition += new Vector3(0, 0.1f, 0);
  132. });
  133. SubY.onClick.AddListener(() =>
  134. {
  135. if (MaterialObj == null)
  136. return;
  137. SaveAlter();
  138. MaterialObj.localPosition -= new Vector3(0, 0.1f, 0);
  139. });
  140. ADDXBtn.onClick.AddListener(() =>
  141. {
  142. if (MaterialObj == null)
  143. return;
  144. SaveAlter();
  145. MaterialObj.localPosition -= new Vector3(0.1f, 0, 0);
  146. });
  147. SubXBtn.onClick.AddListener(() =>
  148. {
  149. if (MaterialObj == null)
  150. return;
  151. SaveAlter();
  152. MaterialObj.localPosition += new Vector3(0.1f, 0, 0);
  153. });
  154. ADDYBtn.onClick.AddListener(() =>
  155. {
  156. if (MaterialObj == null)
  157. return;
  158. SaveAlter();
  159. MaterialObj.localPosition += new Vector3(0, 0.1f, 0);
  160. });
  161. SubYBtn.onClick.AddListener(() =>
  162. {
  163. if (MaterialObj == null)
  164. return;
  165. SaveAlter();
  166. MaterialObj.localPosition -= new Vector3(0, 0.1f, 0);
  167. });
  168. AddZBtn.onClick.AddListener(() =>
  169. {
  170. if (MaterialObj == null)
  171. return;
  172. SaveAlter();
  173. MaterialObj.localPosition += new Vector3(0, 0, 0.1f);
  174. });
  175. SubZBtn.onClick.AddListener(() =>
  176. {
  177. if (MaterialObj == null)
  178. return;
  179. SaveAlter();
  180. MaterialObj.localPosition -= new Vector3(0, 0, 0.1f);
  181. });
  182. InitiativeBtn.onClick.AddListener(() =>
  183. {
  184. if (MaterialObj == null)
  185. return;
  186. InitMaterialObj();
  187. });
  188. RevocationBtn.onClick.AddListener(() =>
  189. {
  190. GameManager.Instance.SetPosRotScale();
  191. if (MaterialObj == null)
  192. return;
  193. if (listAlter.Count >= 1)
  194. {
  195. MaterialObj.localPosition = listAlter[listAlter.Count - 1].pos;
  196. MaterialObj.localEulerAngles = listAlter[listAlter.Count - 1].rot;
  197. MaterialObj.localScale = listAlter[listAlter.Count - 1].scale;
  198. listAlter.RemoveAt(listAlter.Count - 1);
  199. }
  200. });
  201. SaveBtn.onClick.AddListener(() =>
  202. {
  203. /*
  204. if (MaterialObj == null)
  205. {
  206. InstantiateCommand Command = new InstantiateCommand(
  207. InstantiateSystem.Instance.BlueObject.WarningPopUp,
  208. "保存失败\n服务器异常,请稍后重试");
  209. CommandSystem.Instance.Send(Command);
  210. //this.GetService<ISendLogService>().SendLog("Blue","请选择素材");
  211. return;
  212. }
  213. GameManager.Instance.SaveSpoitObjs();
  214. */
  215. // TODO 需要再保存一次
  216. GameManager.Instance.GetPosRotScale();
  217. StartCoroutine(SetSpoitInfo());
  218. });
  219. }
  220. public IEnumerator SetSpoitInfo()
  221. {
  222. countSplit =0;saveData.Clear();
  223. int count = GameManager.Instance.ObjsParent.childCount;
  224. for (int i = 1; i <= count-1;i++) // 第一个LocalNULLShowObj是无用的
  225. {
  226. var spoit = GameManager.Instance.SpoitValues[i-1]; // 某个景点
  227. for (int j = 0; j < spoit.material.Count; j++) // 更新 ObjectTransform
  228. {
  229. for (int k = 0;k< spoit.material[j].materialList.Count; k++)
  230. {
  231. spoit.material[j].select = true;
  232. if (GameManager.Instance.ObjsParent.childCount > i)
  233. {
  234. if (GameManager.Instance.ObjsParent.GetChild(i).childCount > j)
  235. {
  236. if (GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).childCount > k)
  237. {
  238. Debug.LogError("HJJ materialList " + GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).GetChild(k).name +"_" + GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).GetChild(k).localPosition);
  239. spoit.material[j].materialList[k].ObjectTransform.nowPos = GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).GetChild(k).localPosition;
  240. spoit.material[j].materialList[k].ObjectTransform.nowRot = GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).GetChild(k).localEulerAngles;
  241. spoit.material[j].materialList[k].ObjectTransform.nowScale = GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).GetChild(k).localScale;
  242. }
  243. }
  244. }
  245. }
  246. }
  247. SplitSpoitData(spoit,count-1); //// 第一个LocalNULLShowObj是无用的 ,so -1
  248. yield return null;
  249. }
  250. }
  251. private List<SendSaveData> saveData = new List<SendSaveData>();
  252. private void SplitSpoitData(SpoitValue spoit,int spoitCount)
  253. {
  254. countSplit++;
  255. SendSaveData data = new SendSaveData();
  256. data.id = GameManager.Instance.SpoitsValueDetail[spoit.id].id;
  257. data.name = GameManager.Instance.SpoitsValueDetail[spoit.id].name;
  258. data.projectId = DataManager.Instance.ProjectID;
  259. data.material = spoit.material;
  260. data.spoittf = GameManager.Instance.SpoitsValueDetail[spoit.id].spoitTf;
  261. data.position = GameManager.Instance.SpoitsValueDetail[spoit.id].position;
  262. data.triggerImageId = GameManager.Instance.SpoitsValueDetail[spoit.id].triggerImageId;
  263. data.triggerRange = GameManager.Instance.SpoitsValueDetail[spoit.id].triggerRange;
  264. saveData.Add(data);
  265. if (countSplit==spoitCount)
  266. {
  267. string sendData = JsonConvert.SerializeObject(saveData);
  268. JsonData jsdata = JsonMapper.ToObject(sendData);
  269. for (int i = 0; i < jsdata.Count; i++)
  270. {
  271. if(jsdata[i].Keys.Contains("material")&&jsdata[i]["material"].IsArray)
  272. {
  273. for (int j = 0; j < jsdata[i]["material"].Count; j++)
  274. {
  275. if (jsdata[i]["material"][j].Keys.Contains("materialList") && jsdata[i]["material"][j]["materialList"].IsArray)
  276. {
  277. for (int k = 0; k < jsdata[i]["material"][j]["materialList"].Count; k++)
  278. {
  279. jsdata[i]["material"][j]["materialList"][k]["textBJ"] = jsdata[i]["material"][j]["materialList"][k]["TextBJ"];
  280. jsdata[i]["material"][j]["materialList"][k]["downloadPath"] = jsdata[i]["material"][j]["materialList"][k]["DownloadPath"];
  281. jsdata[i]["material"][j]["materialList"][k]["objectTransform"] = jsdata[i]["material"][j]["materialList"][k]["ObjectTransform"];
  282. }
  283. }
  284. }
  285. }
  286. }
  287. Debug.LogError(countSplit + "==" + spoitCount);
  288. Debug.LogError("sendDatasendDatasendData====>" + jsdata.ToJson());
  289. HttpTool.Instance.PostTest("/viewpoint/update", jsdata.ToJson(), SaveCallBack);
  290. }
  291. }
  292. private int countSplit =0;
  293. private void SaveCallBack(string message)
  294. {
  295. try
  296. {
  297. JsonData jd = JsonMapper.ToObject(message);
  298. if (jd.Keys.Contains("message"))
  299. {
  300. if (jd["message"].ToString() == "success")
  301. {
  302. Debug.Log("更新成功");
  303. UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.SaveSpoitDataEnd);
  304. ((LoadingPanel)UIManager.Instance.GetUI(UINameConfig.LoadingPanel)).TextStr = "更新成功";
  305. InstantiateCommand Command = new InstantiateCommand(
  306. InstantiateSystem.Instance.BlueObject.WarningPopUp,
  307. InstantiateSystem.Instance.BlueObject.SuccessText);
  308. CommandSystem.Instance.Send(Command);
  309. PosRotScale.PosRotScalePatchList.Clear();
  310. for (int i = 0; i < GameManager.Instance.ObjsParent.childCount; i++)
  311. {
  312. if (i != 0)
  313. {
  314. for (int j = 0; j < GameManager.Instance.ObjsParent.GetChild(i).childCount; j++)
  315. {
  316. for (int k = 0; k < GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).childCount; k++)
  317. {
  318. PosRotScalePatch PosRotScalePatch = new PosRotScalePatch();
  319. PosRotScalePatch.PosPatch = GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).GetChild(k).localPosition;
  320. PosRotScalePatch.RotPatch = GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).GetChild(k).localEulerAngles;
  321. PosRotScalePatch.ScalePatch = GameManager.Instance.ObjsParent.GetChild(i).GetChild(j).GetChild(k).localScale;
  322. PosRotScale.PosRotScalePatchList.Add(PosRotScalePatch);
  323. }
  324. }
  325. }
  326. }
  327. return;
  328. }
  329. else
  330. {
  331. InstantiateCommand ErrorCommand = new InstantiateCommand(
  332. InstantiateSystem.Instance.BlueObject.WarningPopUp,
  333. InstantiateSystem.Instance.BlueObject.NetErrorText);
  334. CommandSystem.Instance.Send(ErrorCommand);
  335. //this.GetService<ISendLogService>().SendLog("Blue","UnityWebRequest Error");
  336. return;
  337. }
  338. }
  339. else
  340. {
  341. InstantiateCommand ErrorCommand = new InstantiateCommand(
  342. InstantiateSystem.Instance.BlueObject.WarningPopUp,
  343. InstantiateSystem.Instance.BlueObject.NetErrorText);
  344. CommandSystem.Instance.Send(ErrorCommand);
  345. //this.GetService<ISendLogService>().SendLog("Blue","UnityWebRequest Error");
  346. return;
  347. }
  348. }
  349. catch
  350. {
  351. InstantiateCommand ErrorCommand = new InstantiateCommand(
  352. InstantiateSystem.Instance.BlueObject.WarningPopUp,
  353. InstantiateSystem.Instance.BlueObject.NetErrorText);
  354. CommandSystem.Instance.Send(ErrorCommand);
  355. //this.GetService<ISendLogService>().SendLog("Blue","UnityWebRequest Error");
  356. return;
  357. }
  358. }
  359. /// <summary>
  360. /// 选择素材
  361. /// </summary>
  362. /// <param name="MaterialObj"></param>
  363. public void SelectMaterial(Transform MaterialObj)
  364. {
  365. Debug.LogError("MaterialObjName:"+MaterialObj.name);
  366. this.MaterialObj = MaterialObj;
  367. listAlter.Clear();
  368. listAlter = new List<objectData>();
  369. }
  370. /// <summary>
  371. /// 初始化素材
  372. /// 只初始化当前素材
  373. /// </summary>
  374. private void InitMaterialObj()
  375. {
  376. if (MaterialObj == null)
  377. return;
  378. string name = MaterialObj.name;
  379. listAlter.Clear();
  380. listAlter = new List<objectData>();
  381. GameManager.Instance.InitSpoitObjs();
  382. }
  383. private void SaveAlter()
  384. {
  385. objectData data = new objectData();
  386. data.pos = MaterialObj.localPosition;
  387. data.rot = MaterialObj.localEulerAngles;
  388. data.scale = MaterialObj.localScale;
  389. listAlter.Add(data);
  390. }
  391. public void HandleEvent(EventData data)
  392. {
  393. switch (data.ID)
  394. {
  395. case EventID.EVENT_1:
  396. EventData1 data1 = (EventData1)data;
  397. if (data1.SelectObj != null)
  398. {
  399. SelectMaterial(data1.SelectObj.transform);
  400. }
  401. else
  402. {
  403. MaterialObj = null;
  404. listAlter.Clear();
  405. }
  406. break;
  407. case EventID.EVENT_2:
  408. break;
  409. default:
  410. break;
  411. }
  412. }
  413. private void OnDestroy()
  414. {
  415. //EventManager.Instance.Remove(this);
  416. }
  417. }