using System.Collections.Generic; using System.Linq; using Managers; using UnityEngine; namespace UI { public class SkillTreeUI : FullScreenUI { public SkillTreeNodeInformationUI skillTreeNodeInformationUI; public SkillTreePageUI skillTreePageUIPrefab; public Transform skillTreePageUIParent; // 用于承载 SkillTreePageUI 实例的 Transform public List skillTreePages = new(); private int _index; public int Index { get => _index; set { _index = value; if (skillTreePages.Count == 0) return; while (_index < 0) _index += skillTreePages.Count; while (_index >= skillTreePageUIParent.childCount) _index -= skillTreePageUIParent.childCount; } } public SkillTreePageUI FocusedSkillTreePage => skillTreePages.Any() ? skillTreePages[Index] : null; private void Start() { var pageList = SkillTreeManager.Instance.GetAllTag(); if (pageList == null) return; foreach (var page in pageList) { var pageUI = Instantiate(skillTreePageUIPrefab, skillTreePageUIParent); pageUI.skillTreeUI = this; pageUI.GenerateAndLayoutAllSkillTrees(page); skillTreePages.Add(pageUI); pageUI.gameObject.SetActive(false); } FocusedSkillTreePage?.gameObject.SetActive(true); } public override void TickUI() { if (skillTreeNodeInformationUI.gameObject.activeInHierarchy && Input.GetKeyDown(KeyCode.Escape)) skillTreeNodeInformationUI.OnHide(); else base.TickUI(); } public void OnLeft() { FocusedSkillTreePage.gameObject.SetActive(false); Index--; FocusedSkillTreePage.gameObject.SetActive(true); } public void OnRight() { FocusedSkillTreePage.gameObject.SetActive(false); Index++; FocusedSkillTreePage.gameObject.SetActive(true); } public void OnShowNodeInformation(SkillTreeNodeUI skillTreeNodeUI) { skillTreeNodeInformationUI.Init(skillTreeNodeUI); skillTreeNodeInformationUI.gameObject.SetActive(true); } } }