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

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