Fixed SDNA type determination and fixed multiple count per block
This commit is contained in:
@@ -28,10 +28,15 @@ public class Reader {
|
|||||||
|
|
||||||
foreach (var block in blend.Blocks)
|
foreach (var block in blend.Blocks)
|
||||||
{
|
{
|
||||||
if (block.Code != "DATA") continue;
|
//if (block.Code != "DATA") continue;
|
||||||
if(!dnaTypes.ContainsKey((int)block.SdnaIndex)) 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);
|
var obj = Activator.CreateInstance(t);
|
||||||
if(obj == null) continue;
|
if(obj == null) continue;
|
||||||
objects.Add(obj);
|
objects.Add(obj);
|
||||||
@@ -43,7 +48,7 @@ public class Reader {
|
|||||||
if (attrib == null) continue;
|
if (attrib == null) continue;
|
||||||
|
|
||||||
var offset = fields.Where(f => f.GetCustomAttribute<DNAFieldAttribute>()!.OriginalIndex < attrib.OriginalIndex)
|
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;
|
var size = attrib.Size;
|
||||||
|
|
||||||
byte[] data = new byte[size];
|
byte[] data = new byte[size];
|
||||||
@@ -54,6 +59,9 @@ public class Reader {
|
|||||||
|
|
||||||
field.SetValue(obj, value);
|
field.SetValue(obj, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blockOffset += t.GetCustomAttribute<DNAClassAttribute>()!.Size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user