You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
255 lines
9.2 KiB
255 lines
9.2 KiB
3 years ago
|
using System.Collections.Generic;
|
||
|
using System.Web.UI;
|
||
|
using FairyGUI;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.UIElements;
|
||
|
|
||
|
namespace PVSkill
|
||
|
{
|
||
|
public class SkillFatherElement
|
||
|
{
|
||
|
private VisualElement root;
|
||
|
private SkillFatherConfig curSkillFatherConfig;
|
||
|
|
||
|
private Label skillIdLbl;
|
||
|
private Label weaponLimitLbl;
|
||
|
private Label skillTypeLbl;
|
||
|
private Label skillDescLbl;
|
||
|
private VisualElement skillIcon;
|
||
|
|
||
|
// for son skill
|
||
|
private ListView skillSonGroupList;
|
||
|
private ListView skillUpGroupList;
|
||
|
private ListView skillUpSkillSonGroupList;
|
||
|
private SkillSonElement skillSonElement;
|
||
|
private SkillSonElement skillUpSkillSonElement;
|
||
|
|
||
|
private int[] curSkillUpUnlockSkillList;
|
||
|
private List<int[]> curSkillUpList = new List<int[]>();
|
||
|
|
||
|
public SkillFatherElement(VisualElement root)
|
||
|
{
|
||
|
this.root = root;
|
||
|
|
||
|
skillIdLbl = root.Q<Label>("SkillIdLbl");
|
||
|
weaponLimitLbl = root.Q<Label>("WeaponLimitLbl");
|
||
|
skillTypeLbl = root.Q<Label>("SkillTypeLbl");
|
||
|
skillDescLbl = root.Q<Label>("SkillDesc");
|
||
|
skillIcon = root.Q<VisualElement>("SkillIcon");
|
||
|
|
||
|
skillSonGroupList = root.Q<ListView>("SkillSonGroupList");
|
||
|
skillSonGroupList.makeItem = this.MakeSkillSonGroupListItem;
|
||
|
skillSonGroupList.bindItem = this.BindSkillSonGroupListItem;
|
||
|
skillSonGroupList.onSelectionChange += this.OnSkillSonItemChosen;
|
||
|
|
||
|
var elem = root.Q<VisualElement>("SkillSonInfo");
|
||
|
|
||
|
skillSonElement = new SkillSonElement(elem);
|
||
|
|
||
|
skillUpGroupList = root.Q<ListView>("SkillUpGroupList");
|
||
|
skillUpGroupList.makeItem = this.MakeSkillUpGroupListItem;
|
||
|
skillUpGroupList.bindItem = this.BindSkillUpGroupListItem;
|
||
|
skillUpGroupList.onSelectionChange += this.OnSkillUpItemChosen;
|
||
|
|
||
|
skillUpSkillSonGroupList = root.Q<ListView>("SkillUpSkillSonGroupList");
|
||
|
skillUpSkillSonGroupList.makeItem = this.MakeSkillUpSkillSonGroupListItem;
|
||
|
skillUpSkillSonGroupList.bindItem = this.BindSkillUpSkillSonGroupListItem;
|
||
|
skillUpSkillSonGroupList.onSelectionChange += this.OnSkillUpSkillSonItemChosen;
|
||
|
|
||
|
elem = root.Q<VisualElement>("SkillUpSkillSonInfo");
|
||
|
skillUpSkillSonElement = new SkillSonElement(elem);
|
||
|
}
|
||
|
|
||
|
private void BindSkillSonGroupListItem(VisualElement ve, int index)
|
||
|
{
|
||
|
var label = ve.Q<Label>("SkillSonName");
|
||
|
var sonId = this.curSkillFatherConfig.SkillSonGroup[index];
|
||
|
if (sonId == 0)
|
||
|
{
|
||
|
label.text = "无";
|
||
|
return;
|
||
|
}
|
||
|
var sonConfig = SkillSonConfigCategory.Instance.Get(sonId);
|
||
|
label.text = sonConfig.Name;
|
||
|
}
|
||
|
|
||
|
private VisualElement MakeSkillSonGroupListItem()
|
||
|
{
|
||
|
var ve = new VisualElement();
|
||
|
ve.style.width = 100;
|
||
|
ve.style.height = 50;
|
||
|
var label = new Label();
|
||
|
label.name = "SkillSonName";
|
||
|
ve.Add(label);
|
||
|
|
||
|
return ve;
|
||
|
}
|
||
|
|
||
|
private void OnSkillSonItemChosen(IEnumerable<object> obj)
|
||
|
{
|
||
|
foreach (object o in obj)
|
||
|
{
|
||
|
var sonId = (int) o;
|
||
|
if (sonId == 0)
|
||
|
{
|
||
|
this.skillSonElement.Hide();
|
||
|
return;
|
||
|
}
|
||
|
var sonConfig = SkillSonConfigCategory.Instance.Get(sonId);
|
||
|
this.skillSonElement.SetDataByConfig(sonConfig);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void BindSkillUpGroupListItem(VisualElement ve, int index)
|
||
|
{
|
||
|
Label label = ve as Label;
|
||
|
var unlockSkills = this.curSkillUpList[index];
|
||
|
int unlockNum = 0;
|
||
|
|
||
|
if (unlockSkills.Length > 0 && unlockSkills[0] != 0)
|
||
|
{
|
||
|
unlockNum = unlockSkills.Length;
|
||
|
}
|
||
|
|
||
|
label.text = $"{index+1}级解锁({unlockNum})";
|
||
|
if (unlockNum > 0)
|
||
|
{
|
||
|
label.AddToClassList("Highlight");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
label.RemoveFromClassList("Highlight");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private VisualElement MakeSkillUpGroupListItem()
|
||
|
{
|
||
|
var label = new Label();
|
||
|
label.AddToClassList("SkillUpItemLabel");
|
||
|
return label;
|
||
|
}
|
||
|
|
||
|
private void RefreshSkillUpSkillSonGroup(int[] unlockSkills)
|
||
|
{
|
||
|
if (unlockSkills == null || unlockSkills[0] == 0)
|
||
|
{
|
||
|
this.skillUpSkillSonGroupList.itemsSource = new List<int>();
|
||
|
this.skillUpSkillSonGroupList.ClearSelection();
|
||
|
this.skillUpSkillSonElement.Hide();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.skillUpSkillSonGroupList.itemsSource = unlockSkills;
|
||
|
this.skillUpSkillSonGroupList.selectedIndex = 0;
|
||
|
}
|
||
|
|
||
|
this.skillUpSkillSonGroupList.RefreshItems();
|
||
|
}
|
||
|
|
||
|
private void OnSkillUpItemChosen(IEnumerable<object> obj)
|
||
|
{
|
||
|
foreach (object o in obj)
|
||
|
{
|
||
|
var unlockSkills = (int[]) o;
|
||
|
curSkillUpUnlockSkillList = unlockSkills;
|
||
|
if (unlockSkills.Length > 0 && unlockSkills[0] != 0)
|
||
|
{
|
||
|
this.RefreshSkillUpSkillSonGroup(unlockSkills);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.RefreshSkillUpSkillSonGroup(null);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void BindSkillUpSkillSonGroupListItem(VisualElement ve, int index)
|
||
|
{
|
||
|
Label label = ve as Label;
|
||
|
int skillId = curSkillUpUnlockSkillList[index];
|
||
|
var config = SkillSonConfigCategory.Instance.Get(skillId);
|
||
|
label.text = config.Name;
|
||
|
}
|
||
|
|
||
|
private VisualElement MakeSkillUpSkillSonGroupListItem()
|
||
|
{
|
||
|
var label = new Label();
|
||
|
return label;
|
||
|
}
|
||
|
|
||
|
private void OnSkillUpSkillSonItemChosen(IEnumerable<object> obj)
|
||
|
{
|
||
|
foreach (object o in obj)
|
||
|
{
|
||
|
var sonId = (int) o;
|
||
|
var sonConfig = SkillSonConfigCategory.Instance.Get(sonId);
|
||
|
this.skillUpSkillSonElement.SetDataByConfig(sonConfig);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void RefreshSonGroup(int[] skillSonGroup)
|
||
|
{
|
||
|
if (skillSonGroup == null)
|
||
|
{
|
||
|
this.skillSonGroupList.itemsSource = new List<int>();
|
||
|
this.skillSonGroupList.ClearSelection();
|
||
|
this.skillSonElement.Hide();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.skillSonGroupList.itemsSource = skillSonGroup;
|
||
|
this.skillSonGroupList.selectedIndex = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
this.skillSonGroupList.RefreshItems();
|
||
|
}
|
||
|
|
||
|
private void RefreshSkillUpGroup(int skillUpId)
|
||
|
{
|
||
|
if (skillUpId == 0)
|
||
|
{
|
||
|
this.skillUpGroupList.itemsSource = new List<int>();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var skillUpConfig = SkillUpConfigCategory.Instance.Get(skillUpId);
|
||
|
this.curSkillUpList.Clear();
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level1UnlockParameter);
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level2UnlockParameter);
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level3UnlockParameter);
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level4UnlockParameter);
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level5UnlockParameter);
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level6UnlockParameter);
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level7UnlockParameter);
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level8UnlockParameter);
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level9UnlockParameter);
|
||
|
this.curSkillUpList.Add(skillUpConfig.Level10UnlockParameter);
|
||
|
this.skillUpGroupList.itemsSource = this.curSkillUpList;
|
||
|
}
|
||
|
|
||
|
this.skillUpGroupList.ClearSelection();
|
||
|
this.skillUpGroupList.RefreshItems();
|
||
|
this.RefreshSkillUpSkillSonGroup(null);
|
||
|
}
|
||
|
|
||
|
public void SetDataByConfig(SkillFatherConfig config)
|
||
|
{
|
||
|
this.curSkillFatherConfig = config;
|
||
|
|
||
|
this.skillIdLbl.text = $"Id:{config.Id}";
|
||
|
this.weaponLimitLbl.text = $"武器限制:{SkillEditorDefines.WeaponLimitMap[config.Weapon]}";
|
||
|
this.skillTypeLbl.text = $"技能类型:{SkillEditorDefines.SkillTypeMap[config.Type]}";
|
||
|
this.skillDescLbl.text = config.Describe;
|
||
|
|
||
|
var contentItem = UIPackage.GetItemByURL("ui://SkillIcon/arrow");
|
||
|
contentItem.Load();
|
||
|
skillIcon.style.backgroundImage = new StyleBackground(contentItem.texture.nativeTexture as Texture2D);
|
||
|
this.RefreshSonGroup(config.SkillSonGroup);
|
||
|
|
||
|
// for skill up group
|
||
|
var skillUpId = config.SkillUp;
|
||
|
this.RefreshSkillUpGroup(skillUpId);
|
||
|
}
|
||
|
}
|
||
|
}
|