Added type size to custom attributes
This commit is contained in:
@@ -98,6 +98,8 @@ namespace CodeGenerator {
|
||||
//Add the class to the namespace
|
||||
ns.Types.Add(ctd);
|
||||
|
||||
var totalSize = 0;
|
||||
|
||||
//Add the fields to the class
|
||||
Log($"Fields: {type.Fields.Count}");
|
||||
for (var index = 0; index < type.Fields.Count; index++) {
|
||||
@@ -113,10 +115,17 @@ namespace CodeGenerator {
|
||||
Log($"Generating field {field.Name}");
|
||||
cmf = CreateMemberField(field);
|
||||
}
|
||||
cmf.CustomAttributes.Add(GenerateDNAFieldAttribute(index, field, field.M_Parent.M_Parent));
|
||||
|
||||
var size = 0;
|
||||
var attributes = GenerateDNAFieldAttribute(index, field, field.M_Parent.M_Parent, out size);
|
||||
totalSize += size;
|
||||
|
||||
cmf.CustomAttributes.Add(attributes);
|
||||
ctd.Members.Add(cmf);
|
||||
}
|
||||
|
||||
ctd.CustomAttributes[0].Arguments.Add(new CodeAttributeArgument(new CodePrimitiveExpression(totalSize)));
|
||||
|
||||
Log("Generating Parameterless constructor");
|
||||
if(ctd.Members.Count > 0)
|
||||
ctd.Members.Add(GenerateParameterlessConstructor(type, ctd));
|
||||
@@ -331,16 +340,40 @@ namespace CodeGenerator {
|
||||
};
|
||||
ctd.Members.Add(cmp);
|
||||
|
||||
cmf = new CodeMemberField(typeof(int), "_size") {
|
||||
Attributes = MemberAttributes.Private
|
||||
};
|
||||
|
||||
ctd.Members.Add(cmf);
|
||||
|
||||
cmp = new CodeMemberProperty() {
|
||||
Name = "Size",
|
||||
Type = new CodeTypeReference(typeof(int)),
|
||||
Attributes = MemberAttributes.Public,
|
||||
HasGet = true,
|
||||
GetStatements = {
|
||||
new CodeMethodReturnStatement(new CodeSnippetExpression("_size"))
|
||||
},
|
||||
HasSet = true,
|
||||
SetStatements = {
|
||||
new CodeAssignStatement(new CFieldRefExp(new CThisRefExp(), "_size"), 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), "originalName")
|
||||
new(typeof(string), "originalName"),
|
||||
new(typeof(int), "size")
|
||||
});
|
||||
|
||||
cc.Statements.AddRange(new CodeAssignStatement[] {
|
||||
new(new CFieldRefExp(new CThisRefExp(), "OriginalIndex"), new CArgRefExp("originalIndex")),
|
||||
new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName"))
|
||||
new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName")),
|
||||
new(new CFieldRefExp(new CThisRefExp(), "Size"), new CArgRefExp("size"))
|
||||
});
|
||||
|
||||
ctd.Members.Add(cc);
|
||||
@@ -348,15 +381,15 @@ namespace CodeGenerator {
|
||||
}
|
||||
|
||||
private static CodeAttributeDeclaration GenerateDNAFieldAttribute(int index, BlendFile.DnaField field,
|
||||
BlendFile.Dna1Body body) {
|
||||
BlendFile.Dna1Body body, out int size) {
|
||||
string t;
|
||||
int size = body.Lengths[field.IdxType];
|
||||
size = body.Lengths[field.IdxType];
|
||||
|
||||
bool isPointer = false;
|
||||
|
||||
if (field.Name.StartsWith('*'))
|
||||
{
|
||||
size = 4;
|
||||
size = 8;
|
||||
isPointer = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user