using System.Collections; using System.Collections.Generic; using DG.Tweening; using Sirenix.OdinInspector; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class UI_SelectDevicePanel : BasePanel { //private List<TB_Scheme> allSchemeName; private Dictionary<int, TB_DeviceType> allDeviceTypes; private List<Button> deviceItemBtns = new List<Button>(); public Sprite[] showTips; public void Init() { //allSchemeName = GameManager.DataMgr.GetAllSchemeName(); allDeviceTypes = GameManager.DataMgr.GetAllDeviceTypes(); CreatTitleAndBtnItem(); deviceItemBtns[0].GetComponent<Image>().sprite = showTips[1]; deviceItemBtns[0].GetComponent<EventTrigger>().OnPointerEnter(null); } private void CreatTitleAndBtnItem() { var onlyDeviceHashSet = new HashSet<int>(); foreach (var scheme in GameManager.DataMgr.d_System.subjects) { if (!onlyDeviceHashSet.Contains(scheme.deviceTypeId)) //没有这个设备类型ID就添加唯一标识 { onlyDeviceHashSet.Add(scheme.deviceTypeId); var titleItem = GameManager.ResourcesMgr.Load<GameObject>(Const.UI_Item + "UI_SelectDevicePanel/titleItem"); titleItem.transform.parent = GetControl<ScrollRect>("DeviceScrollView").content; if (allDeviceTypes.TryGetValue(scheme.deviceTypeId, out TB_DeviceType deviceNameItem)) { titleItem.GetComponentInChildren<TextMeshProUGUI>().text = deviceNameItem.deviceTypeName; var currentIdList = GameManager.DataMgr.d_System.subjects.FindAll(s => s.deviceTypeId == scheme.deviceTypeId); //遍历每个当前设备类型,并生成按钮 currentIdList.ForEach(x => { var deviceItemBtn = GameManager.ResourcesMgr.Load<GameObject>(Const.UI_Item + "UI_SelectDevicePanel/deviceItemBtn"); //按钮的父节点是标题的父节点content deviceItemBtn.transform.parent = titleItem.transform.parent; deviceItemBtn.GetComponentInChildren<TextMeshProUGUI>().text = x.schemeName; var deviceBtnAComponent = deviceItemBtn.GetComponent<Button>(); deviceItemBtn.name = x.id.ToString(); deviceItemBtns.Add(deviceBtnAComponent); AddEventForDeviceBtn(deviceBtnAComponent, x.deviceMap); }); } } } } private void AddEventForDeviceBtn(Button deviceBtnAComponent, string mapName) { GameManager.UIMgr.AddEventTriggerListener(deviceBtnAComponent, EventTriggerType.PointerEnter, _ => { this.GetControl<Image>("DeviceShowImg").sprite = GameManager.ResourcesMgr.Load<Sprite>(Const.UI_SelectDevicePanel + mapName); this.GetControl<Image>("DeviceShowImg").color = new Color(1, 1, 1, 1); SwitchState(deviceBtnAComponent); }); deviceBtnAComponent.onClick.AddListener(() => { GameManager.RunModelMgr.schemeID = int.Parse(deviceBtnAComponent.name); GameManager.ProcessMgr.Init(GameManager.RunModelMgr.schemeID, GameManager.RunModelMgr.ModeType); GameManager.UIMgr.ShowPanel<UI_LoadingPanel>(E_UI_Layer.System, (panel) => { GameManager.UIMgr.ShowPanel<UI_MainTitlePanel>(E_UI_Layer.Bot, (panel) => { panel.Init(); }); panel.Init(); GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.1f); GameManager.ScenesMgr.LoadSceneAsyn("03_OfficeScene", () => { GameManager.UIMgr.HidePanel<UI_SelectDevicePanel>(); GameManager.UIMgr.HidePanel<UI_BGPanel>(); GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.9f); }); }); }); } private void SwitchState(Button currentBtn) { for (int i = 0; i < deviceItemBtns.Count; i++) { deviceItemBtns[i].GetComponent<Image>().sprite = showTips[0]; } currentBtn.GetComponent<Image>().sprite = showTips[1]; } protected override void OnClick(string btnName) { base.OnClick(btnName); switch (btnName) { case "backBtn": GameManager.UIMgr.ShowPanel<UI_SelectModePanel>(E_UI_Layer.Mid, panel => { panel.Init(); }); GameManager.UIMgr.HidePanel<UI_SelectDevicePanel>(); break; } } }