diff --git a/OpenRA.Game/ObjectCreator.cs b/OpenRA.Game/ObjectCreator.cs index fe84654a78..e7a54ab96a 100755 --- a/OpenRA.Game/ObjectCreator.cs +++ b/OpenRA.Game/ObjectCreator.cs @@ -19,9 +19,9 @@ namespace OpenRA { public class ObjectCreator { - Pair[] ModAssemblies; + Pair[] modAssemblies; - public ObjectCreator( Manifest manifest ) + public ObjectCreator(Manifest manifest) { // All the core namespaces var asms = typeof(Game).Assembly.GetNamespaces() @@ -35,7 +35,7 @@ namespace OpenRA asms.AddRange(asm.GetNamespaces().Select(ns => Pair.New(asm, ns))); } - ModAssemblies = asms.ToArray(); + modAssemblies = asms.ToArray(); } public static Action MissingTypeAction = @@ -43,57 +43,59 @@ namespace OpenRA public T CreateObject(string className) { - return CreateObject( className, new Dictionary() ); + return CreateObject(className, new Dictionary()); } - public T CreateObject( string className, Dictionary args ) + public T CreateObject(string className, Dictionary args) { - foreach( var mod in ModAssemblies ) + foreach (var mod in modAssemblies) { - var type = mod.First.GetType( mod.Second + "." + className, false ); - if( type == null ) continue; + var type = mod.First.GetType(mod.Second + "." + className, false); + if (type == null) continue; var flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance; - var ctors = type.GetConstructors( flags ) - .Where( x => x.HasAttribute() ).ToList(); + var ctors = type.GetConstructors(flags) + .Where(x => x.HasAttribute()).ToList(); - if( ctors.Count == 0 ) - return (T)CreateBasic( type ); - else if( ctors.Count == 1 ) - return (T)CreateUsingArgs( ctors[ 0 ], args ); + if (ctors.Count == 0) + return (T)CreateBasic(type); + else if (ctors.Count == 1) + return (T)CreateUsingArgs(ctors[0], args); else - throw new InvalidOperationException( "ObjectCreator: UseCtor on multiple constructors; invalid." ); + throw new InvalidOperationException("ObjectCreator: UseCtor on multiple constructors; invalid."); } + MissingTypeAction(className); return default(T); } - public object CreateBasic( Type type ) + public object CreateBasic(Type type) { - return type.GetConstructor( new Type[ 0 ] ).Invoke( new object[ 0 ] ); + return type.GetConstructor(new Type[0]).Invoke(new object[0]); } - public object CreateUsingArgs( ConstructorInfo ctor, Dictionary args ) + public object CreateUsingArgs(ConstructorInfo ctor, Dictionary args) { var p = ctor.GetParameters(); - var a = new object[ p.Length ]; - for( int i = 0 ; i < p.Length ; i++ ) + var a = new object[p.Length]; + for (int i = 0; i < p.Length; i++) { var key = p[i].Name; - if ( !args.ContainsKey(key) ) throw new InvalidOperationException("ObjectCreator: key `{0}' not found".F(key)); - a[ i ] = args[ key ]; + if (!args.ContainsKey(key)) throw new InvalidOperationException("ObjectCreator: key `{0}' not found".F(key)); + a[i] = args[key]; } - return ctor.Invoke( a ); + + return ctor.Invoke(a); } public IEnumerable GetTypesImplementing() { var it = typeof(T); - return ModAssemblies.Select( ma => ma.First ).Distinct() + return modAssemblies.Select(ma => ma.First).Distinct() .SelectMany(ma => ma.GetTypes() .Where(t => t != it && it.IsAssignableFrom(t))); } - [AttributeUsage( AttributeTargets.Constructor )] - public class UseCtorAttribute : Attribute {} + [AttributeUsage(AttributeTargets.Constructor)] + public class UseCtorAttribute : Attribute { } } }