private static bool IsTypeMachPlugin(string assemblyName, AllTypeCategory category) { if (!assemblyName.StartsWith("Fort")) { return(false); } Regex regex = new Regex(@"^Fort([a-z,A-Z]*)\-(Editor|Game)\-Plugin$", RegexOptions.IgnoreCase); Match match = regex.Match(assemblyName); if (!match.Success) { return(false); } switch (category) { case AllTypeCategory.Game: return(match.Groups[2].Value == "Game"); case AllTypeCategory.Editor: return(match.Groups[2].Value == "Editor"); case AllTypeCategory.All: return(true); default: throw new ArgumentOutOfRangeException("category", category, null); } }
public static Type[] GetAllTypes(AllTypeCategory category) { switch (category) { case AllTypeCategory.Game: return (AppDomain.CurrentDomain.GetAssemblies() .Where( assembly => assembly.GetName().Name == "Assembly-CSharp" || IsTypeMachPlugin(assembly.GetName().Name, AllTypeCategory.Game)) .SelectMany(assembly => assembly.GetTypes()) .ToArray()); case AllTypeCategory.Editor: return (AppDomain.CurrentDomain.GetAssemblies() .Where( assembly => assembly.GetName().Name == "Assembly-CSharp-Editor" || IsTypeMachPlugin(assembly.GetName().Name, AllTypeCategory.Editor)) .SelectMany(assembly => assembly.GetTypes()) .ToArray()); case AllTypeCategory.All: return (AppDomain.CurrentDomain.GetAssemblies() .Where( assembly => assembly.GetName().Name == "Assembly-CSharp" || assembly.GetName().Name == "Assembly-CSharp-Editor" || IsTypeMachPlugin(assembly.GetName().Name, AllTypeCategory.All)) .SelectMany(assembly => assembly.GetTypes()) .ToArray()); default: throw new ArgumentOutOfRangeException("category", category, null); } }