using System.Reflection; using Kaitai; namespace BlendFile; public class Reader { readonly string _path; private readonly Dictionary dnaTypes = new(); private List objects = new(); public List Objects => objects; public Reader(string path) { _path = path; var types = Assembly.GetExecutingAssembly().DefinedTypes; foreach (var type in types) { var attrib = type.GetCustomAttribute(); 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(); if (attrib == null) continue; } } } }