Files
JJBB/Assets/Project/Script/GUI/SkillBar/SkillRootPage.cs

189 lines
5.5 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
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();
}
}
}