Added Reader class to BlendFile library

This commit is contained in:
Samuele Lorefice
2025-01-23 16:47:32 +01:00
parent 2bd93ab3bb
commit ebcc629feb
3 changed files with 52 additions and 0 deletions

View File

@@ -6,4 +6,14 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="KaitaiStruct.Runtime.CSharp" Version="0.10.0" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\CodeGenerator\BlendFile.cs">
<Link>BlendFile.cs</Link>
</Compile>
</ItemGroup>
</Project> </Project>

42
BlendFile/Reader.cs Normal file
View File

@@ -0,0 +1,42 @@
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;
}
}
}
}