using System; using System.Collections; using System.Collections.Generic; using GameFramework.Event; using UnityEngine; public class TrainStudyCtrl : MonoBehaviour { private Ray _ray; private RaycastHit _raycastHit; public bool _findPosition = false; public bool _learnTarget = false; private ITHardWaryType _currentFindType=ITHardWaryType.none; private Dictionary _colliderList; private Dictionary _modelList; private Dictionary _oriPosition; private Dictionary _moveTargets; private Dictionary _mats; private RayCastColliders _currentCollider; private GameObject _currentModel; private GameObject _currentMoveObj; private Material _currentMat; public Material cpuTargetMat; public Material ramTargetMat; public Material fanTargetMat; public Material powerTargetMat; public int completeCount = 0; private void Awake() { _colliderList = new Dictionary(); _modelList = new Dictionary(); _oriPosition = new Dictionary(); _moveTargets = new Dictionary(); _mats = new Dictionary(); _mats.Add(ITHardWaryType.cpu, cpuTargetMat); _mats.Add(ITHardWaryType.fan, fanTargetMat); _mats.Add(ITHardWaryType.power, powerTargetMat); _mats.Add(ITHardWaryType.ram, ramTargetMat); _currentFindType = ITHardWaryType.power; for (int i = 1; i < 5; i++) { _colliderList.Add((ITHardWaryType)i,this.transform.Find($"{(ITHardWaryType)i}Collider").GetComponent()); _modelList.Add((ITHardWaryType)i,this.transform.Find($"{(ITHardWaryType)i}Model").gameObject); _oriPosition.Add((ITHardWaryType)i,this.transform.Find($"{(ITHardWaryType)i}Model").transform.position); _moveTargets.Add((ITHardWaryType)i,this.transform.Find($"target_{(ITHardWaryType)i}").gameObject); } foreach (var item in _colliderList.Values) { item.SetMeshEnable(false); } foreach (var item in _moveTargets.Values) { item.SetActive(false); } foreach (var item in _modelList.Values) { item.SetActive(false); } _currentModel = _modelList[_currentFindType]; _currentCollider = _colliderList[_currentFindType]; _currentMoveObj = _moveTargets[_currentFindType]; _currentMat = _mats[_currentFindType]; } void Start() { _findPosition = false; _learnTarget = false; GameMain.Event.Subscribe(ReStart_IT_TrainStudyEvent.EventId,ReStartTrain); GameMain.Event.Subscribe(IT_TrainStudyStateEvent.EventId,TrainPause); GameMain.Event.Subscribe(StartTrainStudyItemEvent.EventId,StartHardWaryTrain); GameMain.Event.Subscribe(IT_StartLearnTargetInfoEvent.EventId,StartLearn); } // Update is called once per frame void Update() { if (_findPosition) { _ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(_ray,out _raycastHit)) { if (_raycastHit.collider.gameObject.name.Equals($"{_currentFindType.ToString()}Collider")) { _currentCollider.SetMeshEnable(true); _currentMat.color=Color.green; if (Input.GetKeyDown(KeyCode.Mouse0)) { CurrentHardWaryDone(); } } else { _currentCollider.SetMeshEnable(false); _currentMat.color=Color.red; } _currentMoveObj.transform.position = _raycastHit.point; } } if (_learnTarget) { foreach (var item in _colliderList.Values) { item.SetMeshEnable(false); } _ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(_ray,out _raycastHit)) { switch (_raycastHit.collider.gameObject.name) { case "cpuCollider": _colliderList[ITHardWaryType.cpu].SetMeshEnable(true); GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.cpu)); break; case "fanCollider": _colliderList[ITHardWaryType.fan].SetMeshEnable(true); GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.fan)); break; case "ramCollider": _colliderList[ITHardWaryType.ram].SetMeshEnable(true); GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.ram)); break; case "powerCollider": _colliderList[ITHardWaryType.power].SetMeshEnable(true); GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.power)); break; default: GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.none)); break; } } else { GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.none)); } } } private void OnDestroy() { if (GameMain.Event.Check(ReStart_IT_TrainStudyEvent.EventId, ReStartTrain)) { GameMain.Event.Unsubscribe(ReStart_IT_TrainStudyEvent.EventId,ReStartTrain); } if (GameMain.Event.Check(IT_TrainStudyStateEvent.EventId, TrainPause)) { GameMain.Event.Unsubscribe(IT_TrainStudyStateEvent.EventId,TrainPause); } if (GameMain.Event.Check(IT_StartLearnTargetInfoEvent.EventId, StartLearn)) { GameMain.Event.Unsubscribe(IT_StartLearnTargetInfoEvent.EventId,StartLearn); } if (GameMain.Event.Check(StartTrainStudyItemEvent.EventId, StartHardWaryTrain)) { GameMain.Event.Unsubscribe(StartTrainStudyItemEvent.EventId, StartHardWaryTrain); } } private void CurrentHardWaryDone() { _findPosition = false; _currentModel.SetActive(true); _currentCollider.SetMeshEnable(false); _currentMoveObj.SetActive(false); GameMain.Event.Fire(this,NextTrainStudyItemEvent.Create(_currentFindType)); completeCount++; if (completeCount >= 4) { TrainDone(); _currentFindType = 0; } } private void StartHardWaryTrain(object sender,GameEventArgs e) { StartTrainStudyItemEvent args=(StartTrainStudyItemEvent) e; _currentFindType = args.ItHardWaryType; _currentModel = _modelList[_currentFindType]; _currentCollider = _colliderList[_currentFindType]; _currentMat = _mats[_currentFindType]; //for (int i = 0; i < _moveTargets.Keys.Count; i++) { // Debug.Log(_moveTargets[_moveTargets.Keys); //} //Debug.Log(_moveTargets); //Debug.Log(_currentFindType); _currentMoveObj = _moveTargets[_currentFindType]; _currentMoveObj.SetActive(true); _findPosition = true; _learnTarget = false; } private void StartLearn(object sender,GameEventArgs e) { IT_StartLearnTargetInfoEvent args = (IT_StartLearnTargetInfoEvent)e; _learnTarget = args.start; foreach (var item in _modelList.Values) { item.SetActive(true); } } private void TrainPause(object sender,GameEventArgs e) { IT_TrainStudyStateEvent args = (IT_TrainStudyStateEvent)e; if (!args.isPlaying) { _findPosition = false; foreach (var item in _modelList.Values) { item.SetActive(true); } } } private void TrainDone() { _findPosition = false; GameMain.Event.Fire(this,IT_TrainStudyDoneEvent.Create()); } private void ReStartTrain(object sender,GameEventArgs e) { completeCount = 0; foreach (var item in _colliderList.Values) { item.SetMeshEnable(false); } foreach (var item in _modelList.Values) { item.SetActive(false); } foreach (var item in _moveTargets.Values) { item.SetActive(false); } foreach (var item in _mats.Values) { item.color=Color.red; } _currentFindType = ITHardWaryType.power; _currentModel = _modelList[_currentFindType]; _currentCollider = _colliderList[_currentFindType]; _currentMoveObj = _moveTargets[_currentFindType]; _findPosition = false; _learnTarget = false; GameMain.Event.Fire(this,IT_TrainStudyShowTargetInfoEvent.Create(ITHardWaryType.none)); } }