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; public void Init() { allSchemeName = GameManager.DataMgr.GetAllSchemeName(); allDeviceTypes = GameManager.DataMgr.GetAllDeviceTypes(); CreatTitleAndBtnItem(); } private void CreatTitleAndBtnItem() { var onlyDeviceHashSet = new HashSet<int>(); foreach (var scheme in allSchemeName) { 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 = allSchemeName.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(); AddEventForDeviceBtn(deviceBtnAComponent, x.deviceMap); }); } } } } private void AddEventForDeviceBtn(Button deviceBtnAComponent, string mapName) { GameManager.UIMgr.AddEventTriggerListener(deviceBtnAComponent, EventTriggerType.PointerEnter, _ => { //deviceBtnAComponent.transform.DOScale(1.3f, 0.2f); this.GetControl<Image>("DeviceShowImg").sprite = GameManager.ResourcesMgr.Load<Sprite>(Const.UI_SelectDevicePanel + mapName); this.GetControl<Image>("DeviceShowImg").color = new Color(1, 1, 1, 1); }); GameManager.UIMgr.AddEventTriggerListener(deviceBtnAComponent, EventTriggerType.PointerExit, _ => { //deviceBtnAComponent.transform.DOScale(1f, 0.2f); this.GetControl<Image>("DeviceShowImg").color = new Color(1, 1, 1, 0); }); deviceBtnAComponent.onClick.AddListener(() => { GameManager.RunModelMgr.deviceId = int.Parse(deviceBtnAComponent.name); GameManager.ProcessMgr.Init(GameManager.RunModelMgr.deviceId, E_ModeType.Study); 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); }); }); }); } protected override void OnClick(string btnName) { base.OnClick(btnName); Debug.Log(btnName); switch (btnName) { case "backBtn": UIManager.Instance.ShowPanel<UI_SelectModePanel>(E_UI_Layer.Mid, panel => { panel.Init(); }); UIManager.Instance.HidePanel<UI_SelectDevicePanel>(); break; } } [Button] public void Test1() { foreach (var VARIABLE in allSchemeName) { Debug.LogError(VARIABLE.deviceMap + VARIABLE.schemeName); } Debug.LogError(allDeviceTypes.Count); } }