From 934c878878dc6f36a44c2b3a265802aa781f392b Mon Sep 17 00:00:00 2001 From: mm00 Date: Wed, 12 Mar 2025 19:01:52 +0100 Subject: [PATCH] Added IsPointer field for array attribute, fixed pointer arrays sizes --- BlenderSharp.sln.DotSettings.user | 3 +++ CodeGenerator/Program.cs | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/BlenderSharp.sln.DotSettings.user b/BlenderSharp.sln.DotSettings.user index 347eb6e..4f806d1 100644 --- a/BlenderSharp.sln.DotSettings.user +++ b/BlenderSharp.sln.DotSettings.user @@ -5,6 +5,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -22,6 +23,8 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded + ForceIncluded ForceIncluded True 26214400 diff --git a/CodeGenerator/Program.cs b/CodeGenerator/Program.cs index c9938fd..e7b94b5 100644 --- a/CodeGenerator/Program.cs +++ b/CodeGenerator/Program.cs @@ -241,7 +241,7 @@ namespace CodeGenerator { else //Store the data for when the list attribute is made listCountOffsets.Add(fName, totalSize); - totalSize += field.Type.ParseFSize(); + totalSize += field.Type.ParseFSize()!.Value; } else { Log($"Field {field.Name} is of unknown or unsupported type"); } @@ -367,6 +367,7 @@ namespace CodeGenerator { .AddAutoProperty(typeof(string), "OriginalName") .AddAutoProperty(typeof(string), "UnderlyingType") .AddAutoProperty(typeof(int), "ArrayLenght") + .AddAutoProperty(typeof(bool), "IsPointer") .AddAutoProperty(typeof(int), "MemoryOffset") .AddPropertiesConstructor() .AddBaseConstructorParams(["OriginalIndex", "OriginalName"]) @@ -427,10 +428,16 @@ namespace CodeGenerator { private static CodeAttributeDeclaration GenerateDnaArrayAttribute(int index, DnaField field, Dna1Body body, int offset, out int size) { + var isPointer = false; //Grab the lenght of the single item in the array size = body.Lengths[field.IdxType]; //Generate the array declaration again... to grab the base type CodeMemberField amf = CreateArrayMemberField(field); + + if (field.Name.StartsWith('*')) { + size = 8; + isPointer = true; + } //Generate the type string var sb = new StringBuilder(); @@ -445,7 +452,7 @@ namespace CodeGenerator { var dimensions = field.Name.GetArrayDimensions(); int length = 1; foreach (int dim in dimensions) { - length += dim; + length *= dim; size *= dim; } @@ -457,6 +464,7 @@ namespace CodeGenerator { new(new CodePrimitiveExpression(field.Name)), new(new CodePrimitiveExpression(t)), new(new CodePrimitiveExpression(length)), + new(new CodePrimitiveExpression(isPointer)), new(new CodePrimitiveExpression(offset)) }); return cad;