ControllerPanel.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. using Mirror;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using FLOW;
  6. using GFMain;
  7. using UnityCommon;
  8. using UnityEngine.UI;
  9. using GameFramework.Sound;
  10. namespace DTYJ
  11. {
  12. public class ControllerPanel : NetworkBehaviour
  13. {
  14. public static ControllerPanel instance;
  15. private void Awake()
  16. {
  17. instance = this;
  18. ShowPanel(false);
  19. InitDeng();
  20. InitShuiZhai();
  21. MainEntry.Sound.PlaySound("Assets/_DTYJ/Res/Sounds/人群嘈杂.mp3", "GuangBo", 1, new PlaySoundParams() { Loop = true });
  22. }
  23. [ClientRpc]
  24. public void RpcSetSoundValue(float value)
  25. {
  26. MainEntry.Sound.GetSoundGroup("GuangBo").Volume = value;
  27. }
  28. public GameObject goPanelRoot;
  29. private void Update()
  30. {
  31. if (Input.GetKeyUp(KeyCode.P))
  32. {
  33. if (!isServer) return;
  34. SwitchShowPanel();
  35. }
  36. if (!OnlineCtrl.Instance.xietongServerIsConnected)
  37. UpdateTrain();
  38. }
  39. private void SwitchShowPanel()
  40. {
  41. ShowPanel(!goPanelRoot.activeSelf);
  42. }
  43. public void ShowPanel(bool show)
  44. {
  45. goPanelRoot.SetActive(show);
  46. }
  47. #region 水灾
  48. Dictionary<string, GameObject> dicGos = new Dictionary<string, GameObject>();
  49. public void InitShuiZhai()
  50. {
  51. dicGos.Clear();
  52. var tfRoot = GameObject.Find("快速定位").transform;
  53. int count = tfRoot.childCount;
  54. for (int i = 0; i < count; i++)
  55. {
  56. var child = tfRoot.GetChild(i);
  57. dicGos[child.name] = child.GetChild(0).gameObject;
  58. }
  59. }
  60. GameObject goShuiZai;
  61. ShuiZaiCtrl shuizaiCtrl;
  62. public void OnToggleShuiZai(bool v)
  63. {
  64. CmdSetShuiZai(v, 0);
  65. }
  66. public void OnSliderShuiZai(float v)
  67. {
  68. CmdSetShuiZai(true, v);
  69. }
  70. public Dictionary<string, float> dicSW = new Dictionary<string, float>();
  71. [Command(requiresAuthority = false)]
  72. public void CmdOnLevel(string name, float level)
  73. {
  74. dicSW[name] = level;
  75. foreach (var kvp in dicSW)
  76. {
  77. Debug.Log($"{kvp.Key} 水位 {kvp.Value}");
  78. }
  79. var cmdObj = new ShuiWei_opt();
  80. cmdObj.kvp = new ShuiWei_opt.Info[dicSW.Count];
  81. int index = 0;
  82. foreach (var kvp in dicSW)
  83. {
  84. cmdObj.kvp[index++] = new ShuiWei_opt.Info() { postion = kvp.Key, value = kvp.Value };
  85. }
  86. NetworkAnimPlayer.instance.SendCmdToServer(20601, cmdObj);
  87. }
  88. int nTaskSetShuiWei = -1;
  89. [Command(requiresAuthority = false)]
  90. public void CmdSetShuiZai(bool isOpen, float value)
  91. {
  92. if (isOpen)
  93. {//TODO 开启水灾 停止进出站 列车清空乘客 乘客全部出站
  94. OnlineCtrl.Instance.chengKeCtrl.CountPerMin_ChuZhan = 0;
  95. OnlineCtrl.Instance.chengKeCtrl.CountPerMin = 0;
  96. OnlineCtrl.Instance.chengKeCtrl.ClearCkInTrain();
  97. OnlineCtrl.Instance.chengKeCtrl.SetCKChuZhan(1);
  98. }
  99. Debug.Log($"CmdSetShuiZai isOpen-{isOpen} value-{value}");
  100. RpcSetShuiZai(isOpen, value);
  101. if (isOpen)
  102. {
  103. nTaskSetShuiWei = Utility.Update(5, () =>
  104. {
  105. foreach (var kvp in dicSW)
  106. {
  107. RpcSetShuiWei(kvp.Key, kvp.Value);
  108. }
  109. });
  110. }
  111. else
  112. {
  113. Utility.StopCoroutineExe(nTaskSetShuiWei);
  114. }
  115. }
  116. [ClientRpc]
  117. public void RpcSetShuiWei(string shuiweiname, float shuiwei)
  118. {
  119. dicGos[shuiweiname].GetComponentInChildren<TextMesh>().text = $"{shuiweiname}水位:{shuiwei.ToString("#0.000")} 米";
  120. }
  121. private void ShowLevelTag(bool show)
  122. {
  123. foreach (var kvp in dicGos)
  124. {
  125. kvp.Value.SetActive(show);
  126. }
  127. }
  128. [ClientRpc]
  129. public void RpcSetShuiZai(bool isOpen, float value)
  130. {
  131. ShowLevelTag(isOpen);
  132. if (isOpen)
  133. {
  134. if (goShuiZai == null)
  135. {
  136. MainEntry.Resource.LoadAsset("Assets/_DTYJ/Prefabs/水灾/水灾Flow.prefab", new GameFramework.Resource.LoadAssetCallbacks((assetName, asset, duration, userData) =>
  137. {
  138. goShuiZai = Instantiate((GameObject)asset);
  139. shuizaiCtrl = goShuiZai.GetComponent<ShuiZaiCtrl>();
  140. shuizaiCtrl?.SetFlowValue_up(value);
  141. }));
  142. }
  143. else
  144. {
  145. shuizaiCtrl?.SetFlowValue_up(value);
  146. }
  147. }
  148. else
  149. {
  150. if (goShuiZai != null)
  151. {
  152. DestroyImmediate(goShuiZai);
  153. goShuiZai = null;
  154. shuizaiCtrl = null;
  155. }
  156. }
  157. }
  158. [Command(requiresAuthority = false)]
  159. public void CmdSetShuiZai_down(float value)
  160. {
  161. var conn = OnlineCtrl.Instance.GetConnByRoleName(RoleName.站务员_站台);
  162. if (conn != null)
  163. RpcSetShuiZai_down(conn, value);
  164. }
  165. [TargetRpc]
  166. public void RpcSetShuiZai_down(NetworkConnectionToClient target, float value)
  167. {
  168. shuizaiCtrl.SetFlowValue_down(Mathf.Abs(value));
  169. }
  170. private GameObject goShaDai;
  171. [Command(requiresAuthority = false)]
  172. public void CmdPlaceShaDai()
  173. {
  174. if (goShaDai == null)
  175. goShaDai = OnlineCtrl.Instance.GenerateNetworkObj(13);
  176. }
  177. [Command(requiresAuthority = false)]
  178. public void CmdRemoveShaDai()
  179. {
  180. if (goShaDai != null)
  181. NetworkServer.Destroy(goShaDai);
  182. }
  183. [Command(requiresAuthority = false)]
  184. public void CmdSetCKChuZhan(int chukou)
  185. {
  186. RpcPlayGuangBo(chukou);
  187. OnlineCtrl.Instance.chengKeCtrl.SetCKChuZhan(chukou);
  188. }
  189. [Command(requiresAuthority = false)]
  190. public void CmdPlayGuangBo(int chukou)
  191. {
  192. RpcPlayGuangBo(chukou);
  193. OnlineCtrl.Instance.chengKeCtrl.SetCKChuZhan(chukou);
  194. }
  195. [ClientRpc]
  196. public void RpcPlayGuangBo(int chukou)
  197. {
  198. MainEntry.Sound.PlaySound($"Assets/_DTYJ/Res/Sounds/广播去{chukou}口.wav", "Default");
  199. }
  200. private GameObject goTishiPai;
  201. [Command(requiresAuthority = false)]
  202. public void CmdPlaceTishiPai()
  203. {
  204. if (goTishiPai == null)
  205. goTishiPai = OnlineCtrl.Instance.GenerateNetworkObj(17);
  206. }
  207. [Command(requiresAuthority = false)]
  208. public void CmdRemoveTishiPai()
  209. {
  210. if (goTishiPai != null)
  211. NetworkServer.Destroy(goTishiPai);
  212. }
  213. private GameObject goGaoShi;
  214. [Command(requiresAuthority = false)]
  215. public void CmdPlaceGaoShi()
  216. {
  217. if (goGaoShi == null)
  218. goGaoShi = OnlineCtrl.Instance.GenerateNetworkObj(18);
  219. }
  220. [Command(requiresAuthority = false)]
  221. public void CmdRemoveGaoShi()
  222. {
  223. if (goGaoShi != null)
  224. NetworkServer.Destroy(goGaoShi);
  225. }
  226. private GameObject goZhiHuiBu;
  227. [Command(requiresAuthority = false)]
  228. public void CmdPlaceZhiHuiBu()
  229. {
  230. if (goZhiHuiBu == null)
  231. goZhiHuiBu = OnlineCtrl.Instance.GenerateNetworkObj(19);
  232. }
  233. [Command(requiresAuthority = false)]
  234. public void CmdRemoveZhiHuiBu()
  235. {
  236. if (goZhiHuiBu != null)
  237. NetworkServer.Destroy(goZhiHuiBu);
  238. }
  239. private GameObject goTZFW_Pai;
  240. [Command(requiresAuthority = false)]
  241. public void CmdPlaceTZFW()
  242. {
  243. if (goTZFW_Pai == null)
  244. goTZFW_Pai = OnlineCtrl.Instance.GenerateNetworkObj(20);
  245. }
  246. [Command(requiresAuthority = false)]
  247. public void CmdRemoveTZFW()
  248. {
  249. if (goTZFW_Pai != null)
  250. NetworkServer.Destroy(goTZFW_Pai);
  251. }
  252. private GameObject goShuiBeng_1, goShuiBeng_2;
  253. [Command(requiresAuthority = false)]
  254. public void CmdPlaceShuiBeng(string id)
  255. {
  256. if (id == "1")
  257. {
  258. if (goShuiBeng_1 == null)
  259. goShuiBeng_1 = OnlineCtrl.Instance.GenerateNetworkObj(14);
  260. }
  261. else if (id == "2")
  262. {
  263. if (goShuiBeng_2 == null)
  264. goShuiBeng_2 = OnlineCtrl.Instance.GenerateNetworkObj(16);
  265. }
  266. }
  267. [Command(requiresAuthority = false)]
  268. public void CmdRemoveShuiBeng(string id)
  269. {
  270. if (id == "1")
  271. {
  272. if (goShuiBeng_1 != null)
  273. NetworkServer.Destroy(goShuiBeng_1);
  274. }
  275. else if (id == "2")
  276. {
  277. if (goShuiBeng_2 != null)
  278. NetworkServer.Destroy(goShuiBeng_2);
  279. }
  280. }
  281. #endregion
  282. #region Train
  283. public InputField input_trainNo, input_blockNo;
  284. private float trainSpeed = 0;
  285. public void OnSlider_TrainSpeed(float value)
  286. {
  287. trainSpeed = value;
  288. }
  289. public void OnClickSetTrain()
  290. {
  291. RunTrain(input_trainNo.text, input_blockNo.text);
  292. }
  293. Dictionary<string, TrainInfo> dicTrain = new Dictionary<string, TrainInfo>();
  294. public void RunTrain(string trainNo, string block)
  295. {
  296. TrainInfo trainInfo;
  297. if (dicTrain.ContainsKey(trainNo))
  298. {
  299. trainInfo = dicTrain[trainNo];
  300. }
  301. else
  302. {
  303. trainInfo = new TrainInfo();
  304. dicTrain.Add(trainNo, trainInfo);
  305. }
  306. trainInfo.trainNo = trainNo;
  307. if (trainInfo.blockNo != block)
  308. {
  309. trainInfo.blockNo = block;
  310. trainInfo.offset = 0;
  311. }
  312. trainInfo.speed = trainSpeed;
  313. }
  314. CMDData cmdData10101_train = new CMDData() { cmd = 10101 };
  315. readonly List<string> listTrainStop = new List<string>();
  316. private void UpdateTrain()
  317. {
  318. foreach (var kvp in dicTrain)
  319. {
  320. kvp.Value.offset += kvp.Value.speed * Time.deltaTime;
  321. var trainInfo = kvp.Value;
  322. if (kvp.Value.blockNo == "T0202")
  323. {
  324. if (kvp.Value.offset > 140.6f && kvp.Value.offset < 140.73f)
  325. {
  326. if (!listTrainStop.Contains(kvp.Key))
  327. {
  328. listTrainStop.Add(kvp.Key);
  329. trainInfo.speed = 0;
  330. }
  331. }
  332. else
  333. {
  334. if (listTrainStop.Contains(kvp.Key))
  335. {
  336. listTrainStop.Remove(kvp.Key);
  337. }
  338. }
  339. }
  340. else
  341. {
  342. if (listTrainStop.Contains(kvp.Key))
  343. listTrainStop.Remove(kvp.Key);
  344. }
  345. cmdData10101_train.data = trainInfo;
  346. ControllerPanel.instance.CmdSendMessageMoNI(Newtonsoft.Json.JsonConvert.SerializeObject(cmdData10101_train));
  347. }
  348. }
  349. public void SetTrainDoor(string trainNo, int state)
  350. {
  351. TrainDoorState doorState = new TrainDoorState();
  352. doorState.trainNo = trainNo;
  353. doorState.state = state;
  354. var dataCmd = new { cmd = 10105, data = doorState };
  355. ControllerPanel.instance.CmdSendMessageMoNI(Newtonsoft.Json.JsonConvert.SerializeObject(dataCmd));
  356. }
  357. public InputField input_trainNo_door;
  358. int trainDoorState = 0;
  359. public void OnDropdownTrainDoor(int v)
  360. {
  361. trainDoorState = v;
  362. }
  363. public void OnClickSetTrainDoor()
  364. {
  365. SetTrainDoor(input_trainNo_door.text, trainDoorState);
  366. }
  367. #endregion
  368. #region CK
  369. public void OnSliderJinZhanSpeed(float value)
  370. {
  371. CmdSetJinZhanSpeed((int)value);
  372. }
  373. int countGenerate = 100;
  374. public Text addCKCount;
  375. public void OnSliderCKCount(float value)
  376. {
  377. countGenerate = (int)value;
  378. addCKCount.text = $"进站速度({countGenerate}人/分钟)";
  379. }
  380. [Command(requiresAuthority = false)]
  381. public void CmdSetJinZhanSpeed(int speed)
  382. {
  383. OnlineCtrl.Instance.chengKeCtrl.SetInSpeed(speed);
  384. }
  385. public void OnClickClearAll()
  386. {
  387. CmdClearAllCK();
  388. }
  389. [Command(requiresAuthority = false)]
  390. public void CmdClearAllCK()
  391. {
  392. OnlineCtrl.Instance.chengKeCtrl.RemoveAllChengKe();
  393. }
  394. public void OnClickGenerateCK_Immidiately()
  395. {
  396. CmdGenerateCK_Immidiately(100);
  397. }
  398. [Command(requiresAuthority = false)]
  399. public void CmdGenerateCK_Immidiately(int count)
  400. {
  401. OnlineCtrl.Instance.chengKeCtrl.GenerateImmidiately(count);
  402. }
  403. public void OntoggleChuZhan(bool v)
  404. {
  405. CmdChuZhanIsOn(v);
  406. }
  407. [Command(requiresAuthority = false)]
  408. public void CmdChuZhanIsOn(bool value)
  409. {
  410. OnlineCtrl.Instance.chengKeCtrl.CountPerMin_ChuZhan = value ? 10 : 0;
  411. }
  412. private GameObject goWeilan;
  413. [Command(requiresAuthority = false)]
  414. public void CmdPlaceWeilan()
  415. {
  416. if (goWeilan == null)
  417. goWeilan = OnlineCtrl.Instance.GenerateNetworkObj(15);
  418. }
  419. [Command(requiresAuthority = false)]
  420. public void CmdRemoveWeilan()
  421. {
  422. if (goWeilan != null)
  423. NetworkServer.Destroy(goWeilan);
  424. }
  425. #endregion
  426. #region 设备控制
  427. [Command(requiresAuthority = false)]
  428. public void CmdSendMessageMoNI(string cMDDataJson)
  429. {//模拟来协同服务器的消息
  430. OnlineCtrl.Instance.OnWebSocketMsgReceiveMoNi(cMDDataJson);
  431. }
  432. #endregion
  433. #region 灯
  434. List<MeshRenderer> meshRenderers;
  435. Color oldEmissionColor;
  436. Dictionary<string, GameObject> dicDeng;
  437. private void InitDeng()
  438. {
  439. meshRenderers = new List<MeshRenderer>();
  440. meshRenderers.Add(GameObject.Find("SceneStatic/Chezhan_fangti_static/Chezhan_fangti_static/polySurface4884").GetComponent<MeshRenderer>());
  441. var root = GameObject.Find("SceneStatic/Chezhan_light_static/Chezhan_light_static/zhantai");
  442. int count = root.transform.childCount;
  443. for (int i = 0; i < count; i++)
  444. {
  445. MeshRenderer renderer = root.transform.GetChild(i).GetComponent<MeshRenderer>();
  446. meshRenderers.Add(renderer);
  447. }
  448. oldEmissionColor = meshRenderers[0].material.GetColor("_EmissionColor");
  449. dicDeng = new Dictionary<string, GameObject>();
  450. var rootDeng = GameObject.Find($"灯控制");
  451. for (int i = 0; i < rootDeng.transform.childCount; i++)
  452. {
  453. var child = rootDeng.transform.GetChild(i);
  454. dicDeng[child.name] = child.gameObject;
  455. child.gameObject.SetActive(false);
  456. }
  457. }
  458. [Command(requiresAuthority = false)]
  459. public void CmdDeng(string position, bool v)
  460. {
  461. RpcDeng(position, v);
  462. }
  463. [ClientRpc]
  464. public void RpcDeng(string position, bool v)
  465. {
  466. dicDeng[position].SetActive(!v);
  467. for (int i = 0; i < meshRenderers.Count; i++)
  468. {
  469. meshRenderers[0].material.SetColor("_EmissionColor", v ? oldEmissionColor : Color.black);
  470. }
  471. }
  472. #endregion
  473. public void OnHuoZai(bool v)
  474. {
  475. if (v)
  476. CmdPlaceFire();
  477. else
  478. CmdRemoveFire();
  479. }
  480. private GameObject gohuoZai;
  481. [Command(requiresAuthority = false)]
  482. public void CmdPlaceFire()
  483. {
  484. if (gohuoZai == null)
  485. gohuoZai = OnlineCtrl.Instance.GenerateNetworkObj(21);
  486. }
  487. [Command(requiresAuthority = false)]
  488. public void CmdRemoveFire()
  489. {
  490. if (gohuoZai != null)
  491. NetworkServer.Destroy(gohuoZai);
  492. }
  493. }
  494. }