From 7403dd777650bd22228facf5b661a07f37b4267c Mon Sep 17 00:00:00 2001 From: Samuele Lorefice Date: Tue, 18 Feb 2025 16:27:50 +0100 Subject: [PATCH] Added extra parameter --- BlenderSharp.sln.DotSettings.user | 4 +++- CodeGenerator/Program.cs | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) 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;