Files
Gen_Hack-and-Slash-Roguelite/Client/Assets/Scripts/UI/SkillTreeUI.cs

79 lines
2.4 KiB
C#
Raw Normal View History

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<SkillTreePageUI> 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);
}
}
}