From 8150b3485242faad10be520238d1532f55883784 Mon Sep 17 00:00:00 2001 From: esnya Date: Sun, 22 Aug 2021 13:32:30 +0900 Subject: [PATCH] :sparkles: feat: InariUdonValidator --- Assets/InariUdon/Editor/InariUdonValidator.cs | 49 +++++++++++++++++++ .../Editor/InariUdonValidator.cs.meta | 11 +++++ 2 files changed, 60 insertions(+) create mode 100644 Assets/InariUdon/Editor/InariUdonValidator.cs create mode 100644 Assets/InariUdon/Editor/InariUdonValidator.cs.meta diff --git a/Assets/InariUdon/Editor/InariUdonValidator.cs b/Assets/InariUdon/Editor/InariUdonValidator.cs new file mode 100644 index 0000000..0275d9f --- /dev/null +++ b/Assets/InariUdon/Editor/InariUdonValidator.cs @@ -0,0 +1,49 @@ +#if !COMPILER_UDONSHARP && UNITY_EDITOR +using JetBrains.Annotations; +using UnityEngine; +using UdonSharp; +using UdonSharpEditor; +using System.Reflection; +using System; +using UnityEditor; + +namespace InariUdon +{ + public class InariUdonValidator + { + public static void Validate(T target) where T : UdonSharpBehaviour + { + if (Application.isPlaying) return; + + // if (Selection.activeGameObject != target.gameObject) target.UpdateProxy(); + if (Selection.activeGameObject != target.gameObject) return; + // var udon = UdonSharpEditorUtility.GetBackingUdonBehaviour(target); + // if (udon == null) return; + + var type = target.GetType(); + var fields = type.GetFields(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public); + foreach (var field in fields) + { + // var value = udon.GetProgramVariable(field.Name); + object GetValue() => field.GetValue(target); + // Debug.Log(field.Name); + // Debug.Log(value); + + var attributes = field.GetCustomAttributes(); + foreach (var attribute in attributes) + { + // Debug.Log(attribute); + if (attribute is NotNullAttribute) Validate(target, GetValue() != null, $"{field.Name} is required"); + else if (attribute is MinAttribute min) Validate(target, GetValue() is int i ? i >= min.min : (float)GetValue() >= min.min, $"{field.Name} must be greater than or equal {min}"); + } + } + } + + public static void Validate(UnityEngine.Object target, bool condition, string message) + { + if (Application.isPlaying) return; + if (!condition) Debug.LogError(message, target); + } + } +} +#endif diff --git a/Assets/InariUdon/Editor/InariUdonValidator.cs.meta b/Assets/InariUdon/Editor/InariUdonValidator.cs.meta new file mode 100644 index 0000000..71d2e49 --- /dev/null +++ b/Assets/InariUdon/Editor/InariUdonValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b181803caa717de4e9be3a20a509d281 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: