ObTrainStudyForm.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using DG.Tweening;
  5. using GameFramework;
  6. using GameFramework.Event;
  7. using UnityEngine;
  8. using UnityEngine.SceneManagement;
  9. using UnityEngine.Serialization;
  10. using UnityEngine.UI;
  11. using UnityGameFramework.Runtime;
  12. public class ObTrainStudyForm : UIFormLogic
  13. {
  14. private GameObject _trainPanel;
  15. private GameObject _learnPanel;
  16. private GameObject _faultPanel;
  17. private GameObject _trainDoneTips;
  18. private GameObject _faultDoneTips;
  19. private Button _reStartButton;
  20. private Button _cpuButton;
  21. private Button _ramButton;
  22. private Button _fanButton;
  23. private Button _powerButton;
  24. private bool cpuDone = false;
  25. private bool fanDone = false;
  26. private bool ramDone = false;
  27. private bool powerDone = false;
  28. //private GameObject _overHotTips;
  29. private Button _reStarFaultButton;
  30. private Button _cpuFaultButton;
  31. private Button _ramFaultButton;
  32. private Button _fanFaultButton;
  33. private Button _powerFaultButton;
  34. private Image _cpuValueSlider;
  35. private Text _cpuValueText;
  36. private Image _ramValueSlider;
  37. private Text _ramValueText;
  38. private Slider _hardDiskTemperature;
  39. private Image _hardDiskColor;
  40. private Slider _mbTemperature;
  41. private Image _mbColor;
  42. private Slider _fanSpeed;
  43. public Sprite[] learnModelButtonImg;
  44. public Sprite[] trainModelButtonImg;
  45. public Sprite[] bugModelButtonImg;
  46. private Button _learnButton;
  47. private Button _trainButton;
  48. private Button _faultButton;
  49. private IT_TrainModelType _currentType;
  50. private GameObject messagePanel;
  51. private Text nameText;
  52. private Text messageText;
  53. private const string message1 =
  54. "监控摄像头是在数据中心动环监控模式下的重要组成部分。这些摄像头通常分布在关键区域,以提供对数据中心物理安全的实时监控。监控摄像头可以通过视频流捕捉和传输,帮助监控人员监视设备、人员和整个数据中心的活动。";
  55. private const string message2 =
  56. "门禁系统用于控制和监控数据中心的物理访问。这包括使用电子卡或生物识别技术来验证人员身份,并确保只有授权人员能够进入关键区域。门禁系统的集成提高了数据中心的安全性,并可记录人员进出的信息。";
  57. private const string message3 =
  58. "烟雾报警器在数据中心动环监控中发挥着重要作用。它们被设计用于检测烟雾或其他火灾迹象,一旦检测到异常,将发出警报并触发相应的安全协议。烟雾报警器的及时响应对于火灾预防和数据中心设备的保护至关重要。";
  59. private const string message4 =
  60. "照明设备在动环监控模式下不仅提供良好的照明,同时也能作为安全和监视系统的一部分。灯光可以集成到监控摄像头中,用于提高夜间或低照明条件下的监控效果。此外,照明系统还可以与其他传感器集成,如运动传感器,以实现智能控制和能效优化。";
  61. private const string message5 =
  62. "UPS系统在数据中心中是不可或缺的,特别是在动环监控模式下。UPS为关键设备提供稳定的电力支持,防止电力波动对数据中心设备的损害。在监控模式下,UPS系统的状态和电力参数可以通过监控中心实时追踪,以确保数据中心的电力可靠性。";
  63. private const string message6 =
  64. "动环控制中心是整个监控系统的核心,用于集成和管理各种监控设备。在数据中心环境下,动环控制中心可能配备有监控软件和用户界面,用于实时监测和管理所有相关设备的状态。管理员可以通过动环控制中心对摄像头、门禁、烟雾报警器、UPS等设备进行远程监控和操作,确保数据中心的安全性和稳定性。";
  65. private float randomUpdateTime = 0;
  66. private float cpuValue;
  67. private float ramValue;
  68. bool haveFixed = false;
  69. private GameObject tarinList;
  70. private Button trainB1;
  71. private Button trainB2;
  72. public GameObject faultList;
  73. private Button faultB1;
  74. private Button faultB2;
  75. //$$$
  76. public Button[] faultButtons;
  77. public GameObject faultChoicePanel;
  78. public GameObject[] faultChoices;
  79. public GameObject[] powerFaultTips;
  80. public GameObject[] fanFaultTips;
  81. private RectTransform faultTools;
  82. private GameObject faultSelectButtons;
  83. private IT_FaultToolList faultToolList;
  84. protected override void OnInit(object userData)
  85. {
  86. base.OnInit(userData);
  87. _trainPanel = this.transform.Find("trainPanel").gameObject;
  88. _learnPanel = this.transform.Find("learnPanel").gameObject;
  89. _faultPanel = this.transform.Find("faultPanel").gameObject;
  90. InItUiComponent();
  91. //InitFaultTips();
  92. }
  93. protected override void OnOpen(object userData)
  94. {
  95. base.OnOpen(userData);
  96. _trainDoneTips.SetActive(false);
  97. //_cpuButton.GetComponentInChildren<Text>().text = "CPU";
  98. //_fanButton.GetComponentInChildren<Text>().text = "风冷";
  99. //_powerButton.GetComponentInChildren<Text>().text = "电源";
  100. //_ramButton.GetComponentInChildren<Text>().text = "内存";
  101. //GameMain.Event.Subscribe(ReStart_IT_TrainStudyEvent.EventId,ReSetTrainUI);
  102. //GameMain.Event.Subscribe(IT_TrainStudyDoneEvent.EventId,OnIT_TrainStudyDone);
  103. GameMain.Event.Subscribe(Ob_TrainStudyShowTargetInfoEvent.EventId,ChangeTargetMessage);
  104. //GameMain.Event.Subscribe(IT_FaultNextEvent.EventId,OnGetIT_FaultNext);
  105. _learnPanel.SetActive(true);
  106. _trainPanel.SetActive(false);
  107. _learnButton.image.sprite = learnModelButtonImg[1];
  108. _trainButton.image.sprite = trainModelButtonImg[0];
  109. _faultButton.image.sprite = bugModelButtonImg[0];
  110. ChangeToLearn(true,0.1f);
  111. tarinList.SetActive(false);
  112. //_currentType = IT_TrainModelType.learn;
  113. //GameMain.Event.Fire(this,IT_StartLearnTargetInfoEvent.Create());
  114. }
  115. protected override void OnUpdate(float elapseSeconds, float realElapseSeconds)
  116. {
  117. base.OnUpdate(elapseSeconds, realElapseSeconds);
  118. }
  119. private void InItUiComponent()
  120. {
  121. _trainDoneTips = _trainPanel.transform.Find("DoneTips").gameObject;
  122. _trainDoneTips.SetActive(false);
  123. messagePanel = _learnPanel.transform.Find("messagePanel").gameObject;
  124. messagePanel.SetActive(false);
  125. nameText = messagePanel.transform.Find("nameText").GetComponent<Text>();
  126. messageText = messagePanel.transform.Find("messageText").GetComponent<Text>();
  127. _faultDoneTips = _faultPanel.transform.Find("DoneTips").gameObject;
  128. _faultDoneTips.SetActive(false);
  129. _faultPanel.SetActive(false);
  130. _reStartButton = _trainPanel.transform.Find("TrainButton/Verlist/reStartButton").GetComponent<Button>();
  131. _reStartButton.onClick.AddListener(() =>
  132. {
  133. GameMain.Event.Fire(this, ReStart_IT_TrainStudyEvent.Create());
  134. });
  135. _learnButton = this.transform.Find("Navi/B1").GetComponent<Button>();
  136. _learnButton.onClick.AddListener(()=> {
  137. ChangeToLearn(true, 0.1f);
  138. });
  139. _trainButton = this.transform.Find("Navi/B2").GetComponent<Button>();
  140. _trainButton.onClick.AddListener(ChangeToTrain);
  141. _faultButton = this.transform.Find("Navi/B3").GetComponent<Button>();
  142. _faultButton.onClick.AddListener(()=> {
  143. ChangeToFault();
  144. });
  145. tarinList = this.transform.Find("Navi/trainlist").gameObject;
  146. trainB1 = this.transform.Find("Navi/trainlist/B1").GetComponent<Button>();
  147. trainB2 = this.transform.Find("Navi/trainlist/B2").GetComponent<Button>();
  148. trainB1.onClick.AddListener(() =>
  149. {
  150. GameMain.Event.Fire(this, Ele_TrainAniEvent.Create(1));
  151. tarinList.SetActive(false);
  152. });
  153. trainB2.onClick.AddListener(() =>
  154. {
  155. GameMain.Event.Fire(this, Ele_TrainAniEvent.Create(2));
  156. tarinList.SetActive(false);
  157. });
  158. tarinList.SetActive(false);
  159. faultList = this.transform.Find("Navi/faultlist").gameObject;
  160. // faultB1 = this.transform.Find("Navi/faultlist/B1").GetComponent<Button>();
  161. // faultB2 = this.transform.Find("Navi/faultlist/B2").GetComponent<Button>();
  162. //
  163. // faultB1.onClick.AddListener(() =>
  164. // {
  165. // GameMain.Event.Fire(this, IT_FaultStartEvent.Create(IT_FaultType.power));
  166. // faultList.SetActive(false);
  167. // });
  168. //
  169. // faultB2.onClick.AddListener(() =>
  170. // {
  171. // GameMain.Event.Fire(this, IT_FaultStartEvent.Create(IT_FaultType.fan));
  172. // faultList.SetActive(false);
  173. // });
  174. //$$$------------------------
  175. faultChoicePanel = this.transform.Find($"faultChoicePanel").gameObject;
  176. faultChoices = new GameObject[10];
  177. for (int i = 0; i < 10; i++)
  178. {
  179. faultChoices[i] = this.transform.Find($"faultChoicePanel/BG/Quest_{i + 1}").gameObject;
  180. faultChoices[i].SetActive(false);
  181. }
  182. faultChoicePanel.SetActive(false);
  183. faultButtons = new Button[10];
  184. for (int i = 0; i < 10; i++)
  185. {
  186. faultButtons[i] = this.transform.Find($"Navi/faultlist/B{i + 1}").GetComponent<Button>();
  187. }
  188. faultButtons[0].onClick.AddListener(() => { faultChoicesClick(0); });
  189. faultButtons[1].onClick.AddListener(() => { faultChoicesClick(1); });
  190. faultButtons[2].onClick.AddListener(() => { faultChoicesClick(2); });
  191. faultButtons[3].onClick.AddListener(() => { faultChoicesClick(3); });
  192. faultButtons[4].onClick.AddListener(() => { faultChoicesClick(4); });
  193. faultButtons[5].onClick.AddListener(() => { faultChoicesClick(5); });
  194. faultButtons[6].onClick.AddListener(() => { faultChoicesClick(6); });
  195. faultButtons[7].onClick.AddListener(() => { faultChoicesClick(7); });
  196. faultButtons[8].onClick.AddListener(() => { faultChoicesClick(8); });
  197. faultButtons[9].onClick.AddListener(() => { faultChoicesClick(9); });
  198. faultChoicePanel.SetActive(false);
  199. //$$$------------------------
  200. faultList.SetActive(false);
  201. }
  202. //$$$------------------------
  203. private void faultChoicesClick(int index)
  204. {
  205. foreach (var objs in faultChoices)
  206. {
  207. objs.SetActive(false);
  208. }
  209. GameMain.Event.Fire(this, FaultChoicesChangeEvent.Create(index));
  210. faultChoices[index].SetActive(true);
  211. faultChoicePanel.SetActive(true);
  212. faultList.SetActive(false);
  213. }
  214. private void InitFaultTips()
  215. {
  216. fanFaultTips = new GameObject[7];
  217. for (int i = 0; i < fanFaultTips.Length; i++)
  218. {
  219. fanFaultTips[i] = _faultPanel.transform.Find($"Doc/BG/Step1_{i}").gameObject;
  220. fanFaultTips[i].SetActive(false);
  221. }
  222. powerFaultTips = new GameObject[6];
  223. for (int i = 0; i < powerFaultTips.Length; i++)
  224. {
  225. powerFaultTips[i] = _faultPanel.transform.Find($"Doc/BG/Step2_{i}").gameObject;
  226. powerFaultTips[i].SetActive(false);
  227. }
  228. faultTools = _faultPanel.transform.Find($"Tools").GetComponent<RectTransform>();
  229. faultTools.localPosition = new Vector3(1120, 0, 0);
  230. faultSelectButtons = _faultPanel.transform.Find($"FixButton").gameObject;
  231. faultSelectButtons.SetActive(false);
  232. faultToolList = faultTools.GetComponent<IT_FaultToolList>();
  233. }
  234. protected override void OnClose(bool isShutdown, object userData)
  235. {
  236. base.OnClose(isShutdown, userData);
  237. //GameMain.Event.Unsubscribe(ReStart_IT_TrainStudyEvent.EventId,ReSetTrainUI);
  238. //GameMain.Event.Unsubscribe(IT_TrainStudyDoneEvent.EventId,OnIT_TrainStudyDone);
  239. GameMain.Event.Unsubscribe(Ob_TrainStudyShowTargetInfoEvent.EventId,ChangeTargetMessage);
  240. //GameMain.Event.Unsubscribe(IT_FaultNextEvent.EventId,OnGetIT_FaultNext);
  241. }
  242. private async void ChangeToLearn(bool force = false,float delayTime = 0.0f)
  243. {
  244. tarinList.SetActive(false);
  245. _faultDoneTips.SetActive(false);
  246. faultList.SetActive(false);
  247. if (_currentType==IT_TrainModelType.learn && !force)
  248. return;
  249. if (SceneManager.GetActiveScene().name != "TrainStudy5_1")
  250. SceneManager.LoadScene("TrainStudy5_1");
  251. await Task.Delay((int)(delayTime * 1000));
  252. //GameMain.Event.Fire(this,IT_TrainStudyStateEvent.Create(false));
  253. GameMain.Event.Fire(this,Ob_StartLearnTargetInfoEvent.Create());
  254. _currentType = IT_TrainModelType.learn;
  255. _learnButton.image.sprite = learnModelButtonImg[1];
  256. _trainButton.image.sprite = trainModelButtonImg[0];
  257. _faultButton.image.sprite = bugModelButtonImg[0];
  258. _trainPanel.SetActive(false);
  259. _learnPanel.SetActive(true);
  260. _faultPanel.SetActive(false);
  261. //$$$------------------------
  262. faultChoicePanel.SetActive(false);
  263. }
  264. private void ChangeToTrain()
  265. {
  266. faultList.SetActive(false);
  267. tarinList.SetActive(true);
  268. if (_currentType == IT_TrainModelType.train)
  269. return;
  270. _learnPanel.SetActive(false);
  271. _faultPanel.SetActive(false);
  272. _learnButton.image.sprite = learnModelButtonImg[0];
  273. _trainButton.image.sprite = trainModelButtonImg[1];
  274. _faultButton.image.sprite = bugModelButtonImg[0];
  275. _currentType = IT_TrainModelType.train;
  276. if (SceneManager.GetActiveScene().name != "TrainStudy4")
  277. SceneManager.LoadScene("TrainStudy4");
  278. //_trainPanel.SetActive(true);
  279. //$$$------------------------
  280. faultChoicePanel.SetActive(false);
  281. }
  282. private void ChangeToFault(bool force = false)
  283. {
  284. tarinList.SetActive(false);
  285. faultList.SetActive(true);
  286. if (_currentType == IT_TrainModelType.fault && !force)
  287. return;
  288. GameMain.Event.Fire(this, Cool_TrainStudyStateEvent.Create(false));
  289. GameMain.Event.Fire(this, Cool_StartLearnTargetInfoEvent.Create(false));
  290. _learnButton.image.sprite = learnModelButtonImg[0];
  291. _trainButton.image.sprite = trainModelButtonImg[0];
  292. _faultButton.image.sprite = bugModelButtonImg[1];
  293. _faultPanel.SetActive(true);
  294. _trainPanel.SetActive(false);
  295. _learnPanel.SetActive(false);
  296. _currentType = IT_TrainModelType.fault;
  297. _faultPanel.transform.Find($"Doc").gameObject.SetActive(false);
  298. _faultPanel.transform.Find($"FixButton").gameObject.SetActive(false);
  299. _faultPanel.transform.Find($"Tools").GetComponent<RectTransform>().localPosition = new Vector3(1120, 0, 0);
  300. if (SceneManager.GetActiveScene().name != "TrainStudy5_2" || force)
  301. SceneManager.LoadScene("TrainStudy5_2");
  302. //$$$------------------------
  303. faultChoicePanel.SetActive(false);
  304. }
  305. private void ResetFaultPanel()
  306. {
  307. _faultDoneTips.SetActive(false);
  308. haveFixed = false;
  309. DOTween.Kill("_fanSpeed");
  310. DOTween.Kill("_mbTemperature");
  311. DOTween.Kill("_hardDiskTemperature");
  312. //_overHotTips.SetActive(true);
  313. _mbTemperature.value = 9;
  314. _mbTemperature.DOValue(8, 0.8f).SetLoops(-1, LoopType.Yoyo).SetId("_mbTemperature");
  315. _hardDiskTemperature.value = 9;
  316. _hardDiskTemperature.DOValue(8, 1.2f).SetLoops(-1, LoopType.Yoyo).SetId("_hardDiskTemperature");
  317. _fanSpeed.value = 0;
  318. _hardDiskColor.color=Color.red;
  319. _mbColor.color=Color.red;
  320. }
  321. private void FixFault(ITHardWaryType type)
  322. {
  323. switch (type)
  324. {
  325. case ITHardWaryType.cpu:
  326. break;
  327. case ITHardWaryType.fan:
  328. break;
  329. case ITHardWaryType.ram:
  330. break;
  331. case ITHardWaryType.power:
  332. break;
  333. case ITHardWaryType.none:
  334. break;
  335. }
  336. }
  337. private void ChangeTargetMessage(object sender,GameEventArgs e)
  338. {
  339. Ob_TrainStudyShowTargetInfoEvent args = (Ob_TrainStudyShowTargetInfoEvent)e;
  340. switch (args._Type)
  341. {
  342. case ObHardWaryType.SXT:
  343. nameText.text = "监控摄像头";
  344. messageText.text = message1;
  345. if (!messagePanel.activeSelf)
  346. {
  347. messagePanel.SetActive(true);
  348. }
  349. break;
  350. case ObHardWaryType.MJ:
  351. nameText.text = "门禁";
  352. messageText.text = message2;
  353. if (!messagePanel.activeSelf)
  354. {
  355. messagePanel.SetActive(true);
  356. }
  357. break;
  358. case ObHardWaryType.YWBJQ:
  359. nameText.text = "烟雾报警器";
  360. messageText.text = message3;
  361. if (!messagePanel.activeSelf)
  362. {
  363. messagePanel.SetActive(true);
  364. }
  365. break;
  366. case ObHardWaryType.ZM:
  367. nameText.text = "照明设备";
  368. messageText.text = message4;
  369. if (!messagePanel.activeSelf)
  370. {
  371. messagePanel.SetActive(true);
  372. }
  373. break;
  374. case ObHardWaryType.UPS:
  375. nameText.text = "UPS";
  376. messageText.text = message5;
  377. if (!messagePanel.activeSelf)
  378. {
  379. messagePanel.SetActive(true);
  380. }
  381. break;
  382. case ObHardWaryType.DHKZ:
  383. nameText.text = "动环控制中心";
  384. messageText.text = message6;
  385. if (!messagePanel.activeSelf)
  386. {
  387. messagePanel.SetActive(true);
  388. }
  389. break;
  390. case ObHardWaryType.none:
  391. messagePanel.SetActive(false);
  392. break;
  393. }
  394. }
  395. private void ReSetTrainUI(object sender,GameEventArgs e)
  396. {
  397. _trainDoneTips.SetActive(false);
  398. //_cpuButton.GetComponentInChildren<Text>().text = "CPU";
  399. //_fanButton.GetComponentInChildren<Text>().text = "风冷";
  400. //_powerButton.GetComponentInChildren<Text>().text = "电源";
  401. //_ramButton.GetComponentInChildren<Text>().text = "内存";
  402. //cpuDone = false;
  403. //fanDone = false;
  404. //ramDone = false;
  405. //powerDone = false;
  406. }
  407. private void OnIT_TrainStudyDone(object sender, GameEventArgs e)
  408. {
  409. //Debug.Log(11111111111);
  410. _faultDoneTips.SetActive(true);
  411. ChangeToFault(true);
  412. //GameMain.UI.OpenUIForm("Tips", "Pop");
  413. }
  414. private void OnGetIT_FaultNext(object sender, GameEventArgs e)
  415. {
  416. IT_FaultNextEvent args = (IT_FaultNextEvent)e;
  417. _faultPanel.transform.Find($"Doc").gameObject.SetActive(true);
  418. switch (args.FaultType)
  419. {
  420. case IT_FaultType.fan:
  421. for (int i = 0; i < fanFaultTips.Length; i++)
  422. {
  423. fanFaultTips[i].SetActive(false);
  424. }
  425. fanFaultTips[args.stepIndex].SetActive(true);
  426. if (args.stepIndex == 0)
  427. {
  428. for (int i = 0; i < powerFaultTips.Length; i++)
  429. {
  430. powerFaultTips[i].SetActive(false);
  431. }
  432. faultSelectButtons.SetActive(true);
  433. faultTools.localPosition = new Vector3(1120, 0, 0);
  434. faultToolList.ReSetToolList(1);
  435. }
  436. else
  437. {
  438. if (args.stepIndex == 4)
  439. {
  440. faultToolList.ShowChassisCover();
  441. }
  442. faultSelectButtons.SetActive(false);
  443. faultTools.localPosition = new Vector3( 920, 0, 0);
  444. }
  445. break;
  446. case IT_FaultType.power:
  447. for (int i = 0; i < powerFaultTips.Length; i++)
  448. {
  449. powerFaultTips[i].SetActive(false);
  450. }
  451. powerFaultTips[args.stepIndex].SetActive(true);
  452. if (args.stepIndex == 0)
  453. {
  454. for (int i = 0; i < fanFaultTips.Length; i++)
  455. {
  456. fanFaultTips[i].SetActive(false);
  457. }
  458. faultSelectButtons.SetActive(true);
  459. faultTools.localPosition = new Vector3(1120, 0, 0);
  460. faultToolList.ReSetToolList(0);
  461. }
  462. else
  463. {
  464. faultSelectButtons.SetActive(false);
  465. faultTools.localPosition = new Vector3( 920, 0, 0);
  466. }
  467. break;
  468. }
  469. }
  470. }