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

40 lines
1.5 KiB
C#

using System;
using Sirenix.OdinInspector;
using Sirenix.OdinInspector.Editor;
using Sirenix.OdinInspector.Editor.Validation;
using Sirenix.Utilities;
using UnityEngine;
using VOID.Editor.AttributeValidator.Objects;
using VOID.Generic.Objects.Abstract;
[assembly: RegisterValidator(typeof(AbstractObjectValidator))]
namespace VOID.Editor.AttributeValidator.Objects
{
public class AbstractObjectValidator : ValueValidator<AbstractObject>
{
protected override void Validate(ValidationResult result)
{
if (Value == null) return;
if (OdinPrefabUtility.GetPrefabKind(Value.gameObject) is not PrefabKind.Regular) return;
IsComponentOrderValid(result);
}
private void IsComponentOrderValid(ValidationResult result)
{
var components = Value.gameObject.GetComponents<Component>();
var abstractObjectIndex = Array.FindIndex(components, component => component is AbstractObject);
// *Object is first (or right after Transform)
if (abstractObjectIndex <= 1) return;
result.AddError($"{Value.GetType().GetNiceName()} should be first component (right after Transform)")
.WithFix(() =>
{
for (var i = 0; i < abstractObjectIndex - 1; i++)
UnityEditorInternal.ComponentUtility.MoveComponentUp(components[abstractObjectIndex]);
});
}
}
}