189 lines
5.5 KiB
C#
189 lines
5.5 KiB
C#
|
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();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|