Files
2026-07-09 21:33:33 +02:00

47 lines
1.8 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Sirenix.OdinInspector.Editor;
using UnityEditor;
using UnityEngine;
using VOID.Generic.DropTable;
namespace VOID.Editor.ValueDrawers
{
[DrawerPriority(DrawerPriorityLevel.SuperPriority)]
public class DropTableGroupDrawer : OdinValueDrawer<DropTableGroup>
{
protected override void DrawPropertyLayout(GUIContent label)
{
var parent = ValueEntry?.Property?.Parent?.ValueEntry?.WeakSmartValue;
if (parent is List<DropTableGroup> list)
{
var percent = ValueEntry.SmartValue.weight / list.Sum(group => group.weight);
var colorProgress = ValueEntry.SmartValue.weight / list.Max(group => group.weight);
var style = new GUIStyle();
style.alignment = TextAnchor.MiddleCenter;
style.fontStyle = FontStyle.Bold;
style.normal.textColor = Color.white;
style.normal.background = GetBackgroundColor(Color.Lerp(Color.red, Color.green, colorProgress));
EditorGUILayout.BeginHorizontal();
GUILayout.Box($"{Mathf.FloorToInt(percent*100)}%", style, GUILayout.Width(35), GUILayout.ExpandHeight(true));
EditorGUILayout.BeginVertical();
CallNextDrawer(label);
EditorGUILayout.EndVertical();
EditorGUILayout.EndHorizontal();
}
else
{
CallNextDrawer(label);
}
}
private static Texture2D GetBackgroundColor(Color color)
{
var texture = new Texture2D(1, 1);
texture.SetPixel(0, 0, color);
texture.Apply();
return texture;
}
}
}