Files
TheVVaS-Assets/RPGCoreCommon/DropTable/Editor/DropTableDrawer.cs
T
2026-04-25 23:37:10 +02:00

71 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using RPGCoreCommon.Helpers;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
using Object = UnityEngine.Object;
namespace RPGCoreCommon.DropTable.Editor
{
[Serializable]
[CanEditMultipleObjects]
[CustomEditor(typeof(DropTableSO))]
public class DropTableDrawer : UnityEditor.Editor
{
[SerializeField] private VisualTreeAsset _groupVisualTreeAsset;
[SerializeField] private VisualTreeAsset _rowVisualTreeAsset;
public static VisualTreeAsset groupVisualTreeAsset { get; private set; }
public static VisualTreeAsset rowVisualTreeAsset { get; private set; }
public override VisualElement CreateInspectorGUI()
{
groupVisualTreeAsset = _groupVisualTreeAsset;
rowVisualTreeAsset = _rowVisualTreeAsset;
if (serializedObject.isEditingMultipleObjects)
return new HelpBox($"Multiple {nameof(DropTableSO)} editing is disabled.", HelpBoxMessageType.Warning);
var property = serializedObject.FindProperty(nameof(DropTableSO.group));
var wrapper = new VisualElement();
wrapper.schedule.Execute(() =>
{
var mainInspector = wrapper.GetFirstAncestorOfType<InspectorElement>();
mainInspector.style.paddingLeft = 4f;
mainInspector.style.paddingRight = 4f;
});
var resultBox = new HelpBox();
resultBox.style.display = DisplayStyle.None;
resultBox.style.unityTextAlign = TextAnchor.MiddleCenter;
var resultButton = new Button();
resultButton.style.marginTop = 20f;
resultButton.clicked += () => PrintResult(resultBox, property.boxedValue as DropTableGroup);
resultButton.text = "Try your luck...";
wrapper.Add(new DropTableGroupElement(property));
wrapper.Add(resultButton);
wrapper.Add(resultBox);
return wrapper;
}
private void PrintResult(HelpBox resultBox, DropTableGroup value)
{
resultBox.Clear();
resultBox.style.display = DisplayStyle.Flex;
var result = new Dictionary<Object, int>();
value.Get(ref result);
result.DictForEach((item, count) =>
{
var row = new VisualElement();
row.style.flexDirection = FlexDirection.Row;
row.Add(new ObjectField{value = item, enabledSelf = false});
row.Add(new Label($" -> {count}"));
resultBox.Add(row);
});
}
}
}