TrainStudyCtrl.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using GameFramework.Event;
  5. using UnityEngine;
  6. public class TrainStudyCtrl : MonoBehaviour
  7. {
  8. private Ray _ray;
  9. private RaycastHit _raycastHit;
  10. public bool _findPosition = false;
  11. public bool _learnTarget = false;
  12. private ITHardWaryType _currentFindType=ITHardWaryType.none;
  13. private Dictionary<ITHardWaryType, RayCastColliders> _colliderList;
  14. private Dictionary<ITHardWaryType, GameObject> _modelList;
  15. private Dictionary<ITHardWaryType, Vector3> _oriPosition;
  16. private Dictionary<ITHardWaryType, GameObject> _moveTargets;
  17. private Dictionary<ITHardWaryType, Material> _mats;
  18. private RayCastColliders _currentCollider;
  19. private GameObject _currentModel;
  20. private GameObject _currentMoveObj;
  21. private Material _currentMat;
  22. public Material cpuTargetMat;
  23. public Material ramTargetMat;
  24. public Material fanTargetMat;
  25. public Material powerTargetMat;
  26. public int completeCount = 0;
  27. private void Awake()
  28. {
  29. _colliderList = new Dictionary<ITHardWaryType, RayCastColliders>();
  30. _modelList = new Dictionary<ITHardWaryType, GameObject>();
  31. _oriPosition = new Dictionary<ITHardWaryType, Vector3>();
  32. _moveTargets = new Dictionary<ITHardWaryType, GameObject>();
  33. _mats = new Dictionary<ITHardWaryType, Material>();
  34. _mats.Add(ITHardWaryType.cpu, cpuTargetMat);
  35. _mats.Add(ITHardWaryType.fan, fanTargetMat);
  36. _mats.Add(ITHardWaryType.power, powerTargetMat);
  37. _mats.Add(ITHardWaryType.ram, ramTargetMat);
  38. _currentFindType = ITHardWaryType.power;
  39. for (int i = 1; i < 5; i++)
  40. {
  41. _colliderList.Add((ITHardWaryType)i,this.transform.Find($"{(ITHardWaryType)i}Collider").GetComponent<RayCastColliders>());
  42. _modelList.Add((ITHardWaryType)i,this.transform.Find($"{(ITHardWaryType)i}Model").gameObject);
  43. _oriPosition.Add((ITHardWaryType)i,this.transform.Find($"{(ITHardWaryType)i}Model").transform.position);
  44. _moveTargets.Add((ITHardWaryType)i,this.transform.Find($"target_{(ITHardWaryType)i}").gameObject);
  45. }
  46. foreach (var item in _colliderList.Values)
  47. {
  48. item.SetMeshEnable(false);
  49. }
  50. foreach (var item in _moveTargets.Values)
  51. {
  52. item.SetActive(false);
  53. }
  54. foreach (var item in _modelList.Values)
  55. {
  56. item.SetActive(false);
  57. }
  58. _currentModel = _modelList[_currentFindType];
  59. _currentCollider = _colliderList[_currentFindType];
  60. _currentMoveObj = _moveTargets[_currentFindType];
  61. _currentMat = _mats[_currentFindType];
  62. }
  63. void Start()
  64. {
  65. _findPosition = false;
  66. _learnTarget = false;
  67. GameMain.Event.Subscribe(ReStart_IT_TrainStudyEvent.EventId,ReStartTrain);
  68. GameMain.Event.Subscribe(IT_TrainStudyStateEvent.EventId,TrainPause);
  69. GameMain.Event.Subscribe(StartTrainStudyItemEvent.EventId,StartHardWaryTrain);
  70. GameMain.Event.Subscribe(IT_StartLearnTargetInfoEvent.EventId,StartLearn);
  71. }
  72. // Update is called once per frame
  73. void Update()
  74. {
  75. if (_findPosition)
  76. {
  77. _ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  78. if (Physics.Raycast(_ray,out _raycastHit))
  79. {
  80. if (_raycastHit.collider.gameObject.name.Equals($"{_currentFindType.ToString()}Collider"))
  81. {
  82. _currentCollider.SetMeshEnable(true);
  83. _currentMat.color=Color.green;
  84. if (Input.GetKeyDown(KeyCode.Mouse0))
  85. {
  86. CurrentHardWaryDone();
  87. }
  88. }
  89. else
  90. {
  91. _currentCollider.SetMeshEnable(false);
  92. _currentMat.color=Color.red;
  93. }
  94. _currentMoveObj.transform.position = _raycastHit.point;
  95. }
  96. }
  97. if (_learnTarget)
  98. {
  99. foreach (var item in _colliderList.Values)
  100. {
  101. item.SetMeshEnable(false);
  102. }
  103. _ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  104. if (Physics.Raycast(_ray,out _raycastHit))
  105. {
  106. switch (_raycastHit.collider.gameObject.name)
  107. {
  108. case "cpuCollider":
  109. _colliderList[ITHardWaryType.cpu].SetMeshEnable(true);
  110. GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.cpu));
  111. break;
  112. case "fanCollider":
  113. _colliderList[ITHardWaryType.fan].SetMeshEnable(true);
  114. GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.fan));
  115. break;
  116. case "ramCollider":
  117. _colliderList[ITHardWaryType.ram].SetMeshEnable(true);
  118. GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.ram));
  119. break;
  120. case "powerCollider":
  121. _colliderList[ITHardWaryType.power].SetMeshEnable(true);
  122. GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.power));
  123. break;
  124. default:
  125. GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.none));
  126. break;
  127. }
  128. }
  129. else
  130. {
  131. GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.none));
  132. }
  133. }
  134. }
  135. private void OnDestroy()
  136. {
  137. if (GameMain.Event.Check(ReStart_IT_TrainStudyEvent.EventId, ReStartTrain))
  138. {
  139. GameMain.Event.Unsubscribe(ReStart_IT_TrainStudyEvent.EventId,ReStartTrain);
  140. }
  141. if (GameMain.Event.Check(IT_TrainStudyStateEvent.EventId, TrainPause))
  142. {
  143. GameMain.Event.Unsubscribe(IT_TrainStudyStateEvent.EventId,TrainPause);
  144. }
  145. if (GameMain.Event.Check(IT_StartLearnTargetInfoEvent.EventId, StartLearn))
  146. {
  147. GameMain.Event.Unsubscribe(IT_StartLearnTargetInfoEvent.EventId,StartLearn);
  148. }
  149. if (GameMain.Event.Check(StartTrainStudyItemEvent.EventId, StartHardWaryTrain))
  150. {
  151. GameMain.Event.Unsubscribe(StartTrainStudyItemEvent.EventId, StartHardWaryTrain);
  152. }
  153. }
  154. private void CurrentHardWaryDone()
  155. {
  156. _findPosition = false;
  157. _currentModel.SetActive(true);
  158. _currentCollider.SetMeshEnable(false);
  159. _currentMoveObj.SetActive(false);
  160. GameMain.Event.Fire(this,NextTrainStudyItemEvent.Create(_currentFindType));
  161. completeCount++;
  162. if (completeCount >= 4)
  163. {
  164. TrainDone();
  165. _currentFindType = 0;
  166. }
  167. }
  168. private void StartHardWaryTrain(object sender,GameEventArgs e)
  169. {
  170. StartTrainStudyItemEvent args=(StartTrainStudyItemEvent) e;
  171. _currentFindType = args.ItHardWaryType;
  172. _currentModel = _modelList[_currentFindType];
  173. _currentCollider = _colliderList[_currentFindType];
  174. _currentMat = _mats[_currentFindType];
  175. //for (int i = 0; i < _moveTargets.Keys.Count; i++) {
  176. // Debug.Log(_moveTargets[_moveTargets.Keys);
  177. //}
  178. //Debug.Log(_moveTargets);
  179. //Debug.Log(_currentFindType);
  180. _currentMoveObj = _moveTargets[_currentFindType];
  181. _currentMoveObj.SetActive(true);
  182. _findPosition = true;
  183. _learnTarget = false;
  184. }
  185. private void StartLearn(object sender,GameEventArgs e)
  186. {
  187. IT_StartLearnTargetInfoEvent args = (IT_StartLearnTargetInfoEvent)e;
  188. _learnTarget = args.start;
  189. foreach (var item in _modelList.Values)
  190. {
  191. item.SetActive(true);
  192. }
  193. }
  194. private void TrainPause(object sender,GameEventArgs e)
  195. {
  196. IT_TrainStudyStateEvent args = (IT_TrainStudyStateEvent)e;
  197. if (!args.isPlaying)
  198. {
  199. _findPosition = false;
  200. foreach (var item in _modelList.Values)
  201. {
  202. item.SetActive(true);
  203. }
  204. }
  205. }
  206. private void TrainDone()
  207. {
  208. _findPosition = false;
  209. GameMain.Event.Fire(this,IT_TrainStudyDoneEvent.Create());
  210. }
  211. private void ReStartTrain(object sender,GameEventArgs e)
  212. {
  213. completeCount = 0;
  214. foreach (var item in _colliderList.Values)
  215. {
  216. item.SetMeshEnable(false);
  217. }
  218. foreach (var item in _modelList.Values)
  219. {
  220. item.SetActive(false);
  221. }
  222. foreach (var item in _moveTargets.Values)
  223. {
  224. item.SetActive(false);
  225. }
  226. foreach (var item in _mats.Values)
  227. {
  228. item.color=Color.red;
  229. }
  230. _currentFindType = ITHardWaryType.power;
  231. _currentModel = _modelList[_currentFindType];
  232. _currentCollider = _colliderList[_currentFindType];
  233. _currentMoveObj = _moveTargets[_currentFindType];
  234. _findPosition = false;
  235. _learnTarget = false;
  236. GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.none));
  237. }
  238. }