A game about forced loneliness, made by TACStudios
at master 1.9 kB view raw
1using System; 2using System.Collections.Generic; 3using System.Linq; 4 5namespace UnityEditor.ShaderGraph 6{ 7 internal interface INodeValidationExtension 8 { 9 internal enum Status { Warning, Error, None } 10 11 string GetValidatorKey(); 12 Status GetValidationStatus(AbstractMaterialNode node, out string msg); 13 } 14 15 internal static class NodeValidation 16 { 17 private static List<INodeValidationExtension> s_validators; 18 private static void Init() 19 { 20 s_validators = new(); 21 foreach (var type in TypeCache.GetTypesDerivedFrom(typeof(INodeValidationExtension)).Where(e => !e.IsGenericType)) 22 { 23 var validator = (INodeValidationExtension)Activator.CreateInstance(type); 24 s_validators.Add(validator); 25 } 26 } 27 28 internal static void HandleValidationExtensions(AbstractMaterialNode node) 29 { 30 if (node.owner == null || node.owner.messageManager == null) 31 return; 32 33 if (s_validators == null) 34 Init(); 35 36 foreach(var validator in s_validators) 37 { 38 var status = validator.GetValidationStatus(node, out var msg); 39 40 if (node.owner.messageManager.AnyError(e => e == node.objectId)) 41 node.owner.messageManager.ClearNodesFromProvider(validator, Enumerable.Repeat(node, 1)); 42 43 if (status != INodeValidationExtension.Status.None) 44 { 45 var severity = status == INodeValidationExtension.Status.Warning ? Rendering.ShaderCompilerMessageSeverity.Warning : Rendering.ShaderCompilerMessageSeverity.Error; 46 node.owner.messageManager.AddOrAppendError(validator, node.objectId, new ShaderMessage(msg, severity)); 47 } 48 } 49 } 50 } 51}