using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Reflection; using System.Linq; using System; public static class NodeEditorUtilities { public static bool GetAttrib(Type classType, out T attribOut) where T : Attribute { object[] attribs = classType.GetCustomAttributes(typeof(T), false); return GetAttrib(attribs, out attribOut); } public static bool GetAttrib(object[] attribs, out T attribOut) where T : Attribute { for (int i = 0; i < attribs.Length; i++) { if (attribs[i].GetType() == typeof(T)) { attribOut = attribs[i] as T; return true; } } attribOut = null; return false; } /// Return color based on type public static Color GetTypeColor(Type type) { UnityEngine.Random.InitState(type.Name.GetHashCode()); return new Color(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value); } /// Returns true if this can be casted to public static bool IsCastableTo(this Type from, Type to) { if (to.IsAssignableFrom(from)) return true; var methods = from.GetMethods(BindingFlags.Public | BindingFlags.Static) .Where( m => m.ReturnType == to && (m.Name == "op_Implicit" || m.Name == "op_Explicit") ); return methods.Count() > 0; } }