diff --git a/BlenderSharp.sln.DotSettings.user b/BlenderSharp.sln.DotSettings.user
index b5d702b..014660d 100644
--- a/BlenderSharp.sln.DotSettings.user
+++ b/BlenderSharp.sln.DotSettings.user
@@ -1,4 +1,6 @@
ForceIncluded
+ ForceIncluded
ForceIncluded
- ForceIncluded
\ No newline at end of file
+ ForceIncluded
+ ForceIncluded
\ No newline at end of file
diff --git a/CodeGenerator/Program.cs b/CodeGenerator/Program.cs
index 55c59ae..e32cbe1 100644
--- a/CodeGenerator/Program.cs
+++ b/CodeGenerator/Program.cs
@@ -4,6 +4,7 @@ using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Runtime.InteropServices.ComTypes;
using System.Text;
using Kaitai;
using Microsoft.CSharp;
@@ -218,12 +219,28 @@ namespace CodeGenerator {
};
ctd.Members.Add(cmp);
+ cmp = new CodeMemberProperty() {
+ Name = "UnderlyingType",
+ Type = new CodeTypeReference(typeof(Type)),
+ Attributes = MemberAttributes.Public,
+ HasGet = true,
+ GetStatements = {
+ new CodeMethodReturnStatement(new CodeSnippetExpression("_originalType.ParseFType()"))
+ },
+ HasSet = true,
+ SetStatements = {
+ new CodeAssignStatement(new CFieldRefExp(new CThisRefExp(), "_originalType"), new CArgRefExp("value"))
+ }
+ };
+ ctd.Members.Add(cmp);
+
var cc = new CodeConstructor() { Attributes = MemberAttributes.Public };
cc.Parameters.AddRange(new CParamDeclExp[] {
new(typeof(int), "originalIndex"),
new(typeof(string), "originalType"),
new(typeof(string), "originalName"),
+ new(typeof(Type), "underlyingType"),
new(typeof(int), "size")
});
@@ -231,6 +248,7 @@ namespace CodeGenerator {
new(new CFieldRefExp(new CThisRefExp(), "OriginalIndex"), new CArgRefExp("originalIndex")),
new(new CFieldRefExp(new CThisRefExp(), "OriginalType"), new CArgRefExp("originalType")),
new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName")),
+ new(new CFieldRefExp(new CThisRefExp(), "OriginalType"), new CArgRefExp("underlyingType")),
new(new CFieldRefExp(new CThisRefExp(), "Size"), new CArgRefExp("size"))
});
@@ -306,11 +324,20 @@ namespace CodeGenerator {
private static CodeAttributeDeclaration GenerateDNAFieldAttribute(int index, BlendFile.DnaField field,
BlendFile.Dna1Body body) {
+ Type t;
+ if (field.Name.Contains('[')) {
+ CodeMemberField amf = CreateArrayMemberField(field);
+ t = Type.GetType($"Array<{amf.Type.ArrayElementType.BaseType}>");
+ } else {
+ t = Type.GetType(field.Type.ParseFType());
+ }
+
CodeAttributeDeclaration cad = new("DNAFieldAttribute");
cad.Arguments.AddRange(new CodeAttributeArgumentCollection() {
new(new CodePrimitiveExpression(index)),
new(new CodePrimitiveExpression(field.Type)),
new(new CodePrimitiveExpression(field.Name)),
+ new(new CodePrimitiveExpression(t)),
new(new CodePrimitiveExpression((int)body.Lengths[field.IdxType]))
});
return cad;