diff --git a/BlendFile/Reader.cs b/BlendFile/Reader.cs index 2b069ae..3dc2e79 100644 --- a/BlendFile/Reader.cs +++ b/BlendFile/Reader.cs @@ -28,31 +28,39 @@ public class Reader { foreach (var block in blend.Blocks) { - if (block.Code != "DATA") continue; + //if (block.Code != "DATA") continue; if(!dnaTypes.ContainsKey((int)block.SdnaIndex)) continue; - Type t = dnaTypes[(int)block.SdnaIndex]; - var obj = Activator.CreateInstance(t); - if(obj == null) continue; - objects.Add(obj); + Type t = dnaTypes.Values.First(x => + x.GetCustomAttribute()!.OriginalName == block.SdnaStruct.Type); + + var count = block.Count; + var blockOffset = 0; + for(var i=0; i(); - if (attrib == null) continue; + foreach (var field in fields) { + var attrib = field.GetCustomAttribute(); + if (attrib == null) continue; - var offset = fields.Where(f => f.GetCustomAttribute()!.OriginalIndex < attrib.OriginalIndex) - .Sum(f => f.GetCustomAttribute()!.Size); - var size = attrib.Size; + var offset = fields.Where(f => f.GetCustomAttribute()!.OriginalIndex < attrib.OriginalIndex) + .Sum(f => f.GetCustomAttribute()!.Size) + blockOffset; + var size = attrib.Size; - byte[] data = new byte[size]; - Array.Copy((byte[])block.Body, offset, data, 0, size); + byte[] data = new byte[size]; + Array.Copy((byte[])block.Body, offset, data, 0, size); - var value = ConvertFieldData(data, attrib.OriginalType); - if(value == null) continue; + var value = ConvertFieldData(data, attrib.OriginalType); + if(value == null) continue; - field.SetValue(obj, value); + field.SetValue(obj, value); + } + + blockOffset += t.GetCustomAttribute()!.Size; } } }