121 lines
4.7 KiB
C#
121 lines
4.7 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Art.temp.Editor.CharacterData;
|
|
using Art.temp.Editor.PrefabTool;
|
|
using UnityEditor;
|
|
using UnityEditor.UIElements;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace Art.temp.Editor.PlayerBrowser
|
|
{
|
|
public class PlayerBrowserWindow : EditorWindow
|
|
{
|
|
private VisualElement a00Pane;
|
|
private VisualElement a01Pane;
|
|
|
|
[MenuItem("Tools/*角色工具/角色浏览器")]
|
|
public static void ShowEditor()
|
|
{
|
|
var win = GetWindow<PlayerBrowserWindow>("Player Browser");
|
|
win.minSize = new Vector2(900, 400);
|
|
}
|
|
|
|
public void CreateGUI()
|
|
{
|
|
// 布局
|
|
var view = new TwoPaneSplitView(0, 200, TwoPaneSplitViewOrientation.Horizontal);
|
|
var listPane = new ListView();
|
|
var playerPane = new TwoPaneSplitView(0, 350, TwoPaneSplitViewOrientation.Horizontal);
|
|
a00Pane = new VisualElement();
|
|
a01Pane = new VisualElement();
|
|
|
|
rootVisualElement.Add(view);
|
|
view.Add(listPane);
|
|
view.Add(playerPane);
|
|
playerPane.Add(a00Pane);
|
|
playerPane.Add(a01Pane);
|
|
|
|
// 列表元素 item
|
|
var personArray = JsonData.GetPersons().Where(a => a.id[0] == 'A').ToArray();
|
|
listPane.makeItem = () => new Label();
|
|
listPane.bindItem = (item, index) =>
|
|
{
|
|
((Label)item).text = $"{personArray[index].id} {personArray[index].name}";
|
|
|
|
string personId = personArray[index].id;
|
|
char[] chars = personId.ToCharArray();
|
|
chars[personId.Length - 4] = '1';
|
|
string nameId = new(chars);
|
|
|
|
var player1 = CharacterFactory.CreatePlayer(personId);
|
|
var player2 = CharacterFactory.CreatePlayer(nameId);
|
|
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 = personArray;
|
|
listPane.selectionChanged += OnIDSelectionChange;
|
|
}
|
|
|
|
private void OnIDSelectionChange(IEnumerable<object> selectedItems)
|
|
{
|
|
a00Pane.Clear();
|
|
a01Pane.Clear();
|
|
if (selectedItems.First() is not Person selectedPerson) return;
|
|
string personId = selectedPerson.id;
|
|
|
|
CreateVe(a00Pane, personId);
|
|
|
|
char[] chars = personId.ToCharArray();
|
|
chars[personId.Length - 4] = '1';
|
|
CreateVe(a01Pane, new string(chars));
|
|
}
|
|
|
|
private static void CreateVe(VisualElement pane, string nameId)
|
|
{
|
|
var player = CharacterFactory.CreatePlayer(nameId);
|
|
var personArray = JsonData.GetPersons().Where(a => a.id[0] == 'A').ToArray();
|
|
var person = personArray.FirstOrDefault(a => a.id == nameId);
|
|
|
|
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 });
|
|
|
|
pane.Add(new Label("表情设定"));
|
|
if (person != null) pane.Add(new TextField("brow") { value = person.brow });
|
|
if (person != null) pane.Add(new TextField("eye") { value = person.eye });
|
|
if (person != null) pane.Add(new TextField("brow color") { value = person.brow_color });
|
|
if (person != null) pane.Add(new TextField("eye color") { value = person.eye_color });
|
|
int faceId = 0;
|
|
if (person != null)
|
|
{
|
|
int.TryParse(person.brow, out var a);
|
|
int.TryParse(person.eye, out var b);
|
|
faceId = (a - 1) * 5 + b;
|
|
}
|
|
|
|
if (person != null) pane.Add(new TextField("DefaultEmojiImgId") { value = faceId.ToString() });
|
|
}
|
|
}
|
|
} |