diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/ContentCompiler.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/ContentCompiler.cs index 684a101a..51ea90f3 100644 --- a/ANX.Framework.Content.Pipeline/Serialization/Compiler/ContentCompiler.cs +++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/ContentCompiler.cs @@ -30,12 +30,20 @@ namespace ANX.Framework.Content.Pipeline.Serialization.Compiler } public ContentTypeWriter GetTypeWriter(Type type) + { + IEnumerable dependencies; + return GetTypeWriter(type, out dependencies); + } + + public ContentTypeWriter GetTypeWriter(Type type, out IEnumerable dependencies) { if (type == null) { throw new ArgumentNullException("type"); } + dependencies = new List(); + ContentTypeWriter contentTypeWriter; if (!this.writerInstances.TryGetValue(type, out contentTypeWriter)) { @@ -47,6 +55,14 @@ namespace ANX.Framework.Content.Pipeline.Serialization.Compiler { Type genericType = handler.MakeGenericType(type.GetGenericArguments()); contentTypeWriter = ((object)Activator.CreateInstance(genericType)) as ContentTypeWriter; + + foreach (Type dependentType in type.GetGenericArguments()) + { + if (!((List)dependencies).Contains(dependentType)) + { + ((List)dependencies).Add(dependentType); + } + } } } else diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/ContentWriter.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/ContentWriter.cs index f7fa1f77..dc72e1d5 100644 --- a/ANX.Framework.Content.Pipeline/Serialization/Compiler/ContentWriter.cs +++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/ContentWriter.cs @@ -235,6 +235,12 @@ namespace ANX.Framework.Content.Pipeline.Serialization.Compiler writer.Write(this, value); } + private ContentTypeWriter GetTypeWriter(Type type) + { + int typeIndex; + return GetTypeWriter(type, out typeIndex); + } + private ContentTypeWriter GetTypeWriter(Type type, out int typeIndex) { if (this.typeTable.TryGetValue(type, out typeIndex)) @@ -242,21 +248,19 @@ namespace ANX.Framework.Content.Pipeline.Serialization.Compiler return this.typeWriters[typeIndex]; } - IEnumerable enumerable = null; - ContentTypeWriter typeWriter = this.compiler.GetTypeWriter(type); //TODO:, out enumerable); + IEnumerable dependencies = null; + ContentTypeWriter typeWriter = this.compiler.GetTypeWriter(type, out dependencies); typeIndex = this.typeWriters.Count; this.typeWriters.Add(typeWriter); this.typeTable.Add(type, typeIndex); - //TODO: what is this for? - //foreach (Type current in enumerable) - //{ - // if (!(current == typeof(object))) - // { - // int num; - // this.GetTypeWriter(current, out num); - // } - //} + foreach (Type dependentType in dependencies) + { + if (!(dependentType == typeof(object))) + { + this.GetTypeWriter(dependentType); + } + } return typeWriter; } diff --git a/ANX.Framework.Content.Pipeline/Serialization/Compiler/SystemTypeWriters/CharWriter.cs b/ANX.Framework.Content.Pipeline/Serialization/Compiler/SystemTypeWriters/CharWriter.cs index 0fb86ab4..9331fa42 100644 --- a/ANX.Framework.Content.Pipeline/Serialization/Compiler/SystemTypeWriters/CharWriter.cs +++ b/ANX.Framework.Content.Pipeline/Serialization/Compiler/SystemTypeWriters/CharWriter.cs @@ -7,7 +7,7 @@ namespace ANX.Framework.Content.Pipeline.Serialization.Compiler.SystemTypeWriters { [ContentTypeWriter] - internal class ByteWriter : BuiltinTypeWriter + internal class CharWriter : BuiltinTypeWriter { protected internal override void Write(ContentWriter output, char value) { diff --git a/ANX.Framework/Properties/AssemblyInfo.cs b/ANX.Framework/Properties/AssemblyInfo.cs index cd89cf33..4e1f4e30 100644 --- a/ANX.Framework/Properties/AssemblyInfo.cs +++ b/ANX.Framework/Properties/AssemblyInfo.cs @@ -31,8 +31,8 @@ using System.Runtime.InteropServices; // // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: -[assembly: AssemblyVersion("0.4.39.*")] -[assembly: AssemblyFileVersion("0.4.39.0")] +[assembly: AssemblyVersion("0.5.0.*")] +[assembly: AssemblyFileVersion("0.5.0.0")] [assembly: InternalsVisibleTo("ANX.RenderSystem.Windows.DX10")] [assembly: InternalsVisibleTo("ANX.RenderSystem.Windows.DX11")]