Files
JJBB/Assets/Project/Script/GUI/SkillBar/SkillRootPage.cs
2024-08-23 15:49:34 +08:00

189 lines
5.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
public class SkillRootPage : MonoBehaviour
{
public GameObject _SkillItemPrefab;
public RectTransform line; // 穿插技能图标的横线只对它的长度以及X做处理。
private static Queue<SkillRootItem> _IdleItemPrefabs = new Queue<SkillRootItem>(); // 预设复用
private List<SkillRootItem> _SkillItems = new List<SkillRootItem>();
public List<SkillRootItem> SkillItems
{
get
{
return _SkillItems;
}
}
private List<RectTransform> _SkillLines = new List<RectTransform>();
private SkillRootItem _SelectedItem;
public void InitContainer(List<SkillRootItem.SkillShowInfo> showItems, UIItemBase.ItemClick itemClick, bool isOtherPlayer = false)
{
ClearItems();
showItems.Sort((showItemA, showItemB) =>
{
if (showItemA.SkillLearn.ShowPosX < showItemB.SkillLearn.ShowPosX)
return -1;
else if (showItemA.SkillLearn.ShowPosX > showItemB.SkillLearn.ShowPosX)
return 1;
else
{
if (showItemA.SkillLearn.ShowPosY > showItemB.SkillLearn.ShowPosY)
return -1;
else if (showItemA.SkillLearn.ShowPosY < showItemB.SkillLearn.ShowPosY)
return 1;
}
return 0;
});
float minX= float.MaxValue;
float maxX = float.MinValue;
// 显示技能图标
foreach (var showItem in showItems)
{
//if (showItem.SkillLearn.ShowPosX || showItem.SkillLearn.ShowPosY s)
// continue;
SkillRootItem skillItem = GetIdleItem();
skillItem.ShowSkillItem(showItem, isOtherPlayer);
// 位置计算
float posX = showItem.SkillLearn.ShowPosX;
float posY = showItem.SkillLearn.ShowPosY;
minX = Mathf.Min(minX, posX);
maxX = Mathf.Max(maxX, posX);
skillItem._ClickEvent = itemClick;
skillItem._PanelClickEvent = OnSkillItemSelect;
skillItem._RectTransform.anchoredPosition = new Vector2(posX, posY);
_SkillItems.Add(skillItem);
}
if(line != null)
{
line.anchoredPosition = new Vector2((minX + maxX) / 2, line.anchoredPosition.y);
line.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, maxX - minX);
}
}
public void SelectDefaultFirst()
{
if (_SkillItems.Count > 0)
{
_SkillItems[0].OnItemClick();
}
}
public void SelectItem(SkillRootItem.SkillShowInfo selectShow)
{
if (selectShow == null)
{
SelectDefaultFirst();
return;
}
foreach (var skillItem in _SkillItems)
{
if (skillItem.ShowSkillInfo.SkillBase == selectShow.SkillBase)
{
skillItem.OnItemClick();
return;
}
}
SelectDefaultFirst();
}
private SkillRootItem GetIdleItem()
{
if (_IdleItemPrefabs.Count > 0)
{
var idleItem = _IdleItemPrefabs.Dequeue();
idleItem.gameObject.SetActive(true);
return idleItem;
}
GameObject newItemPrefab = GameObject.Instantiate(_SkillItemPrefab);
newItemPrefab.gameObject.SetActive(true);
SkillRootItem skillItem = newItemPrefab.GetComponent<SkillRootItem>();
newItemPrefab.transform.SetParent(transform);
newItemPrefab.transform.localScale = Vector3.one;
newItemPrefab.transform.localPosition = Vector3.zero;
return skillItem;
}
//private RectTransform GetIdleLine()
//{
// if (_IdleLinePrefabs.Count > 0)
// {
// var idleItem = _IdleLinePrefabs.Dequeue();
// idleItem.gameObject.SetActive(true);
// return idleItem;
// }
// GameObject newItemPrefab = GameObject.Instantiate(_SkillLinePrefab);
// RectTransform rectTranform = newItemPrefab.GetComponent<RectTransform>();
// newItemPrefab.transform.SetParent(transform);
// newItemPrefab.transform.localScale = Vector3.one;
// newItemPrefab.transform.localPosition = Vector3.zero;
// return rectTranform;
//}
private void ClearItems()
{
_IdleItemPrefabs.Clear();
//_IdleLinePrefabs.Clear();
foreach (var skillItem in _SkillItems)
{
skillItem.gameObject.SetActive(false);
_IdleItemPrefabs.Enqueue(skillItem);
}
_SkillItems.Clear();
//foreach (var skillLine in _SkillLines)
//{
// skillLine.gameObject.SetActive(false);
// _IdleLinePrefabs.Enqueue(skillLine);
//}
//_SkillLines.Clear();
}
private void OnSkillItemSelect(UIItemBase skillItemBase)
{
_SelectedItem = skillItemBase as SkillRootItem;
foreach (var skillItem in _SkillItems)
{
if (skillItem != skillItemBase)
{
skillItem.UnSelected();
}
else
{
skillItem.Selected();
}
}
}
private void ShowSkillDetail()
{
if (_SelectedItem == null)
return;
}
public void RefreshEquipedTag()
{
foreach (var skillItem in SkillItems)
{
skillItem.RefreshEquipedTag();
}
}
}