using System; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class DeviceItem : MonoBehaviour { /// /// 已实例化的设备 /// Key:设备名称;Value:设备实例物体 /// public static Dictionary InstantiatedObjects = new Dictionary(); /// /// 所有设备列表 /// public static List DeviceItemsList = new List(); /// /// 当前选中的设备 /// public static DeviceItem SelectedItem; /// /// 设备按钮 /// public Button OnSelectButton; /// /// 设备名称 /// public TextMeshProUGUI DeviceName; /// /// 设备数据 /// public DevicesItemData DevicesItemData; /// /// 是否处在爆炸状态 /// public bool IsExploded; /// /// 默认颜色 /// public Color NormalColor = new Color(0.066f, 0.316f, 0.598f); /// /// 高亮颜色 /// public Color HighlightColor = new Color(0, 0.766f, 1); public void Init(DevicesItemData devicesItemData) { if (!DeviceItemsList.Contains(this)) DeviceItemsList.Add(this); OnSelectButton.onClick.AddListener(OnSelect); if (devicesItemData == null) return; DevicesItemData = devicesItemData; DeviceName.text = devicesItemData.dev_name; DeviceName.color = NormalColor; var dev = Resources.Load("Prefabs/Devices/" + devicesItemData.dev_name); if (dev != null) { var x = Instantiate(dev, GameObject.Find("GameCenter").transform); InstantiatedObjects.Add(devicesItemData.dev_name, x); x.gameObject.SetActive(false); } if (TrainingManager.Instance.PictureDic.ContainsKey(DevicesItemData.dev_name)) { var _path = TrainingManager.Instance.PictureDic[DevicesItemData.dev_name].Find(x => System.IO.Path.GetFileNameWithoutExtension(x) == DevicesItemData.pic_id); MainCoroutine.Instance.CoroutineStart(InterfaceManager.GetSprite(_path, (_sp) => { DevicesItemData._right_sprite = _sp; })); } } private void OnSelect() { if (SelectedItem != this) { if (SelectedItem != null) SelectedItem.OnDisselectDo(); SelectedItem = this; SelectedItem.OnSelectDo(); //if (TrainingManager.Instance.IsTutorial) //{ // AudioManager.Instance.PlayAudio(DevicesItemData.dev_name); //} //切换设备时关闭正在播放的,并且状态切回 AudioManager.Instance.StopAudio(); CanvasMain.Instance.PlayAudioButton.GetComponent().SetStatus(false); } //取消选中 //else //{ // SelectedItem.OnDisselectDo(); // SelectedItem = null; //} } /// /// 当前选中状态 /// public void OnSelectDo() { //选中效果 OnSelectButton.GetComponent().enabled = true; DeviceName.color = HighlightColor; if (InstantiatedObjects.ContainsKey(SelectedItem.DevicesItemData.dev_name)) { //展示设备模型 InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].SetActive(true); //更新交互设备 //BaseCam.Instance.Init(InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].transform.Find("ObjectCenter")); OrbitCamera.Instance.Init(InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].GetComponent().CameraSettingsParam, InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].transform.Find("ObjectCenter")); } //更新设备信息介绍 CanvasMain.Instance.Introduction.text = DevicesItemData.dev_int; //若在结构模式下切换设备,更新标签展示 if (!CanvasMain.Instance.IsPrincipleMode /*&& CanvasMain.Instance.IsTutorialMode*/) CanvasMain.Instance.ShowDeviceTags(); //改变设备时,对应改变练习模式的当前设备信息 TrainingManager.ChangeDevice(SelectedItem); } /// /// 取消当前选中状态 /// public void OnDisselectDo() { OnSelectButton.GetComponent().enabled = false; DeviceName.color = NormalColor; //若在结构模式下切换设备,更新标签展示 if (!CanvasMain.Instance.IsPrincipleMode) { if (InstantiatedObjects.ContainsKey(SelectedItem.DevicesItemData.dev_name)) CanvasMain.Instance.HideDeviceTags(immediately: true, lastDevice: InstantiatedObjects[SelectedItem.DevicesItemData.dev_name]); else CanvasMain.Instance.HideDeviceTags(immediately: true); } else { //前面动画没播放完,不能隐藏此物体 if (InstantiatedObjects.ContainsKey(SelectedItem.DevicesItemData.dev_name)) InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].SetActive(false); } } //private void SetActiveFalse() //{ // if (InstantiatedObjects.ContainsKey(SelectedItem.DevicesItemData.dev_name)) // InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].SetActive(false); //} private void OnDestroy() { DeviceItemsList.Clear(); } }