Files
BlenderSharp/BlendFile/Reader.cs
2025-01-23 16:47:32 +01:00

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;
}
}
}
}