149 lines
5.8 KiB
C#
149 lines
5.8 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Art.temp.Editor.PrefabTool;
|
|
using artcfg.ArtDesign;
|
|
using Framework;
|
|
using UnityEditor;
|
|
using UnityEditor.UIElements;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
|
|
namespace Art.temp.Editor.PlayerBrowser
|
|
{
|
|
public class PlayerBrowserWin : EditorWindow
|
|
{
|
|
private VisualElement infoPane;
|
|
private VisualElement assetsPane1;
|
|
private VisualElement assetsPane2;
|
|
private List<DataPerson> personList;
|
|
|
|
[MenuItem("Tools/*角色工具/主角浏览器")]
|
|
public static void ShowEditor()
|
|
{
|
|
var win = GetWindow<PlayerBrowserWin>("主角浏览器");
|
|
win.minSize = new Vector2(900, 400);
|
|
}
|
|
|
|
public void CreateGUI()
|
|
{
|
|
var toolbar = new Toolbar();
|
|
var refreshBtn = new ToolbarButton(LoadPersonData) { text = "刷新" };
|
|
toolbar.Add(refreshBtn);
|
|
rootVisualElement.Add(toolbar);
|
|
// 布局
|
|
var topView = new TwoPaneSplitView(0, 200, TwoPaneSplitViewOrientation.Horizontal);
|
|
var listPane = new ListView();
|
|
|
|
var playerView = new TwoPaneSplitView(0, 300, TwoPaneSplitViewOrientation.Vertical);
|
|
infoPane = new VisualElement();
|
|
|
|
var assetsView = new TwoPaneSplitView(0, 350, TwoPaneSplitViewOrientation.Horizontal);
|
|
assetsPane1 = new VisualElement();
|
|
assetsPane2 = new VisualElement();
|
|
|
|
rootVisualElement.Add(topView);
|
|
topView.Add(listPane);
|
|
topView.Add(playerView);
|
|
|
|
playerView.Add(infoPane);
|
|
playerView.Add(assetsView);
|
|
|
|
assetsView.Add(assetsPane1);
|
|
assetsView.Add(assetsPane2);
|
|
|
|
// 列表元素
|
|
LoadPersonData();
|
|
listPane.makeItem = () => new Label();
|
|
listPane.bindItem = (item, index) =>
|
|
{
|
|
((Label)item).text = $"{personList[index].NameId} {personList[index].Name}";
|
|
|
|
string model1Id = personList[index].NameId;
|
|
string model2Id = GetModel2Id(model1Id);
|
|
|
|
var player1 = CharacterFactory.CreatePlayer(model1Id);
|
|
var player2 = CharacterFactory.CreatePlayer(model2Id);
|
|
if (player1.AutoPrefab)
|
|
{
|
|
((Label)item).style.color = Color.green;
|
|
}
|
|
else
|
|
{
|
|
if (
|
|
player1.Skill
|
|
&& (player1.Model ? player1.Model.transform.Find("Root") : null)
|
|
&& (player2.Model ? player2.Model.transform.Find("Root") : null)
|
|
)
|
|
{
|
|
((Label)item).style.color = Color.yellow;
|
|
}
|
|
else
|
|
{
|
|
((Label)item).style.color = Color.white;
|
|
}
|
|
}
|
|
};
|
|
|
|
listPane.itemsSource = personList;
|
|
listPane.selectionChanged += OnIDSelectionChange;
|
|
}
|
|
|
|
private void LoadPersonData()
|
|
{
|
|
ArtTableManager.instance.ForceReload();
|
|
personList = ArtTableManager.instance.tables.PersonConfig.DataList.Where(a => a.NameId.StartsWith("A"))
|
|
.ToList();
|
|
}
|
|
|
|
private static string GetModel2Id(string nameId)
|
|
{
|
|
char[] chars = nameId.ToCharArray();
|
|
chars[nameId.Length - 4] = '1';
|
|
return new string(chars);
|
|
}
|
|
|
|
private void OnIDSelectionChange(IEnumerable<object> selectedItems)
|
|
{
|
|
infoPane.Clear();
|
|
assetsPane1.Clear();
|
|
assetsPane2.Clear();
|
|
if (selectedItems.First() is not DataPerson selectedPerson) return;
|
|
string nameId = selectedPerson.NameId;
|
|
|
|
CreateInfoView(infoPane, nameId);
|
|
CreateAssetView(assetsPane1, nameId);
|
|
CreateAssetView(assetsPane2, GetModel2Id(nameId));
|
|
}
|
|
|
|
private void CreateInfoView(VisualElement pane, string nameId)
|
|
{
|
|
DataPerson person = personList.Find(x => x.NameId == nameId);
|
|
if (person == null) return;
|
|
pane.Add(new TextField("名字") { value = person.Name });
|
|
pane.Add(new TextField("武器名") { value = person.WeaponName });
|
|
pane.Add(new TextField("武器Id") { value = person.WeaponId });
|
|
pane.Add(new TextField("武器组") { value = person.GroupName });
|
|
|
|
pane.Add(new Label("表情设定"));
|
|
pane.Add(new TextField("brow") { value = person.BowsType.ToString() });
|
|
pane.Add(new TextField("eye") { value = person.EyesType.ToString() });
|
|
pane.Add(new TextField("mouth") { value = person.MouseType.ToString() });
|
|
pane.Add(new TextField("brow color") { value = person.BowsColor });
|
|
pane.Add(new TextField("eye color") { value = person.EyesColor });
|
|
int faceId = (person.BowsType - 1) * 5 + person.EyesType;
|
|
pane.Add(new TextField("DefaultEmojiImgId") { value = faceId > 0 ? faceId.ToString() : string.Empty });
|
|
}
|
|
|
|
private static void CreateAssetView(VisualElement pane, string modelId)
|
|
{
|
|
CharacterAssetInfo player = CharacterFactory.CreatePlayer(modelId);
|
|
pane.Add(new Label("资源完成度"));
|
|
pane.Add(new ObjectField("模型") { value = player.Model });
|
|
pane.Add(new ObjectField("蒙皮") { value = player.Model ? player.Model.transform.Find("Root") : null });
|
|
pane.Add(new ObjectField("技能") { value = player.Skill });
|
|
pane.Add(new ObjectField("Display Prefab") { value = player.DisplayPrefab });
|
|
pane.Add(new ObjectField("Auto Prefab") { value = player.AutoPrefab });
|
|
}
|
|
}
|
|
} |