42 lines
1.2 KiB
C#
42 lines
1.2 KiB
C#
using System.Reflection;
|
|
using Kaitai;
|
|
|
|
|
|
namespace BlendFile;
|
|
|
|
public class Reader {
|
|
readonly string _path;
|
|
private readonly Dictionary<int, Type> dnaTypes = new();
|
|
|
|
private List<object> objects = new();
|
|
public List<object> Objects => objects;
|
|
|
|
public Reader(string path) {
|
|
_path = path;
|
|
var types = Assembly.GetExecutingAssembly().DefinedTypes;
|
|
foreach (var type in types) {
|
|
var attrib = type.GetCustomAttribute<DNAClassAttribute>();
|
|
if (attrib ==null) continue;
|
|
dnaTypes.Add(attrib.OriginalIndex, type);
|
|
}
|
|
}
|
|
|
|
public void Read() {
|
|
var file = new KaitaiStream(_path);
|
|
var blend = new Kaitai.BlendFile(file);
|
|
|
|
foreach (var block in blend.Blocks) {
|
|
Type t = dnaTypes[(int)block.SdnaIndex];
|
|
var obj = Activator.CreateInstance(t);
|
|
if(obj == null) continue;
|
|
objects.Add(obj);
|
|
|
|
foreach (var field in t.GetFields()) {
|
|
var attrib = field.GetCustomAttribute<DNAFieldAttribute>();
|
|
if (attrib == null) continue;
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
} |