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