Fixed SDNA type determination and fixed multiple count per block

This commit is contained in:
mm00
2025-02-19 18:48:14 +01:00
parent 2d2e45a8cf
commit 33a8f1baf3

View File

@@ -28,10 +28,15 @@ 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];
Type t = dnaTypes.Values.First(x =>
x.GetCustomAttribute<DNAClassAttribute>()!.OriginalName == block.SdnaStruct.Type);
var count = block.Count;
var blockOffset = 0;
for(var i=0; i<count; i++) {
var obj = Activator.CreateInstance(t);
if(obj == null) continue;
objects.Add(obj);
@@ -43,7 +48,7 @@ public class Reader {
if (attrib == null) continue;
var offset = fields.Where(f => f.GetCustomAttribute<DNAFieldAttribute>()!.OriginalIndex < attrib.OriginalIndex)
.Sum(f => f.GetCustomAttribute<DNAFieldAttribute>()!.Size);
.Sum(f => f.GetCustomAttribute<DNAFieldAttribute>()!.Size) + blockOffset;
var size = attrib.Size;
byte[] data = new byte[size];
@@ -54,6 +59,9 @@ public class Reader {
field.SetValue(obj, value);
}
blockOffset += t.GetCustomAttribute<DNAClassAttribute>()!.Size;
}
}
}