private CodeExpression[] CreateArrayFieldExpression(AbideTagField arrayField) { //Prepare List <CodeExpression> expressions = new List <CodeExpression>(); //Loop foreach (AbideTagField field in arrayField.Fields) { //Check if (field.FieldType == FieldType.FieldArrayStart) { //Create expressions.AddRange(CreateArrayFieldExpression(field)); } else { CodeExpression fieldCreateExpression = CreateFieldCreateExpression(field); if (fieldCreateExpression != null) { expressions.Add(new CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodePropertyReferenceExpression( new CodeThisReferenceExpression(), nameof(Block.Fields)), nameof(List <Field> .Add)), fieldCreateExpression)); } } } //Return return(expressions.ToArray()); }
private static AbideTagField CloneField(string name, AbideTagField originalField) { //Setup ObjectName fieldName = originalField.NameObject; fieldName.Name = name; //Initialize AbideTagField field = new AbideTagField { NameObject = fieldName, ReferencedBlock = originalField.ReferencedBlock, BlockName = originalField.BlockName, StructName = originalField.StructName, FieldType = originalField.FieldType, Alignment = originalField.Alignment, MaximumSize = originalField.MaximumSize, ElementSize = originalField.ElementSize, Length = originalField.Length, Explanation = originalField.Explanation, GroupTag = originalField.GroupTag, }; field.Options.AddRange(originalField.Options); //Return return(field); }
private static void ModelAnimationGraphBlock_Preprocess(AbideTagBlock block, TagDefinitionCollection cache) { //Create unknown block AbideTagBlock xboxUnknownAnimationBlock = null; xboxUnknownAnimationBlock = new AbideTagBlock() { Name = "xbox_unknown_animation_block", DisplayName = "xbox_unknown_animaiton_block", FieldSet = new AbideFieldSet(xboxUnknownAnimationBlock) { Alignment = 4 }, MaximumElementCount = short.MaxValue }; xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger }); xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger }); xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger }); xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger }); xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger }); xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger }); //Create data block AbideTagBlock xboxAnimaitonDataBlock = null; xboxAnimaitonDataBlock = new AbideTagBlock() { Name = "xbox_animation_data_block", DisplayName = "xbox_animation_data_block", FieldSet = new AbideFieldSet(xboxAnimaitonDataBlock) { Alignment = 4 }, MaximumElementCount = short.MaxValue }; xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldTagIndex, Name = "owner index" }); xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "block size" }); xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "block offset" }); xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger }); xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger }); //Unknown block field AbideTagField unknownBlockField = new AbideTagField() { Name = "", FieldType = FieldType.FieldBlock, BlockName = "xbox_unknown_animation_block", ReferencedBlock = xboxUnknownAnimationBlock }; //Data block field AbideTagField animationDataBlockField = new AbideTagField() { Name = "animation data", FieldType = FieldType.FieldBlock, BlockName = "xbox_animation_data_block", ReferencedBlock = xboxAnimaitonDataBlock }; //Add blocks to cache cache.Add(xboxUnknownAnimationBlock); cache.Add(xboxAnimaitonDataBlock); //Add fields to block block.FieldSet.Insert(6, animationDataBlockField); block.FieldSet.Insert(7, unknownBlockField); }
private static void GlobalsBlock_Preprocess(AbideTagBlock block, TagDefinitionCollection cache) { //Create obsolete sound block AbideTagBlock globalsObsoleteSoundBlock = null; globalsObsoleteSoundBlock = new AbideTagBlock() { Name = "globals_obsolete_sound_block", DisplayName = "globals_obsolete_sound_block", FieldSet = new AbideFieldSet(globalsObsoleteSoundBlock) { Alignment = 4 }, MaximumElementCount = short.MaxValue }; globalsObsoleteSoundBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldTagReference, GroupTag = (int)new HaloLibrary.TagFourCc("snd!").Dword }); globalsObsoleteSoundBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldTerminator }); //Create multilingual unicode globals block AbideTagBlock globalsMultilingualUnicodeInfoStructBlock = null; globalsMultilingualUnicodeInfoStructBlock = new AbideTagBlock() { Name = "globals_multilingual_unicode_info_struct_block", DisplayName = "globals_multilingual_unicode_info_struct_block", FieldSet = new AbideFieldSet(globalsObsoleteSoundBlock) { Alignment = 4 }, MaximumElementCount = 1 }; globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 8 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "English string count" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "English strings length" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "English string index offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "English strings offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 4 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 8 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Japanese string count" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Japanese strings length" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Japanese string index offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Japanese strings offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 4 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 8 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Dutch string count" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Dutch strings length" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Dutch string index offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Dutch strings offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 4 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 8 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "French string count" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "French strings length" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "French string index offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "French strings offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 4 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 8 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Spanish string count" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Spanish strings length" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Spanish string index offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Spanish strings offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 4 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 8 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Italian string count" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Italian strings length" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Italian string index offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Italian strings offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 4 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 8 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Korean string count" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Korean strings length" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Korean string index offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Korean strings offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 4 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 8 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Chinese string count" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Chinese strings length" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Chinese string index offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Chinese strings offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 4 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 8 }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Portuguese string count" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Portuguese strings length" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Portuguese string index offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldLongInteger, Name = "Portuguese strings offset" }); globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField() { FieldType = FieldType.FieldPad, Length = 4 }); //Obsolete sound block field AbideTagField obsoleteSounds = new AbideTagField() { Name = "sounds (obsolete)", FieldType = FieldType.FieldBlock, BlockName = "globals_obsolete_sound_block", ReferencedBlock = globalsObsoleteSoundBlock }; //Obsolete sound block field AbideTagField multilinualUnicodeInfo = new AbideTagField() { Name = "multilingual unicode info", FieldType = FieldType.FieldStruct, StructName = "globals_multilingual_unicode_info_struct_block", ReferencedBlock = globalsMultilingualUnicodeInfoStructBlock }; //Add blocks to cache cache.Add(globalsObsoleteSoundBlock); cache.Add(globalsMultilingualUnicodeInfoStructBlock); //Replace... block.FieldSet[8] = obsoleteSounds; //Replace sounds block.FieldSet[30] = multilinualUnicodeInfo; //Replace padding }
private void CreateFieldProperty(int index, AbideTagField field) { if (field == null) { throw new ArgumentNullException(nameof(field)); } if (string.IsNullOrEmpty(field.Name)) { return; } Type returnType = null; switch (field.FieldType) { case FieldType.FieldString: case FieldType.FieldLongString: case FieldType.FieldStringId: returnType = typeof(string); break; case FieldType.FieldCharInteger: returnType = typeof(byte); break; case FieldType.FieldShortInteger: returnType = typeof(short); break; case FieldType.FieldLongInteger: returnType = typeof(int); break; case FieldType.FieldAngle: returnType = typeof(float); break; case FieldType.FieldTag: returnType = typeof(TagFourCc); break; case FieldType.FieldCharEnum: returnType = typeof(byte); break; case FieldType.FieldEnum: returnType = typeof(short); break; case FieldType.FieldLongEnum: returnType = typeof(int); break; case FieldType.FieldLongFlags: returnType = typeof(int); break; case FieldType.FieldWordFlags: returnType = typeof(short); break; case FieldType.FieldByteFlags: returnType = typeof(byte); break; case FieldType.FieldPoint2D: returnType = typeof(Point2); break; case FieldType.FieldRectangle2D: returnType = typeof(Rectangle2); break; case FieldType.FieldRgbColor: returnType = typeof(ColorRgb); break; case FieldType.FieldArgbColor: returnType = typeof(ColorArgb); break; case FieldType.FieldReal: case FieldType.FieldRealFraction: returnType = typeof(float); break; case FieldType.FieldRealPoint2D: returnType = typeof(Point2F); break; case FieldType.FieldRealPoint3D: returnType = typeof(Point3F); break; case FieldType.FieldRealVector2D: returnType = typeof(Vector2); break; case FieldType.FieldRealVector3D: returnType = typeof(Vector3); break; case FieldType.FieldQuaternion: returnType = typeof(Quaternion); break; case FieldType.FieldEulerAngles2D: returnType = typeof(Vector2); break; case FieldType.FieldEulerAngles3D: returnType = typeof(Vector3); break; } //Format name string originalName = AbideCodeDomGlobals.GeneratePascalCasedName(field.Name); if (string.IsNullOrEmpty(originalName)) { return; } int nameCount = 0; string formattedName = originalName; while (fieldNames.Contains(formattedName)) { formattedName = $"{originalName}{++nameCount}"; } //Add to list fieldNames.Add(formattedName); //Create field indexer CodeIndexerExpression fieldsIndexerExpression = new CodeIndexerExpression( new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), nameof(Block.Fields))); fieldsIndexerExpression.Indices.Add(new CodePrimitiveExpression(index)); //Create field value property expression CodePropertyReferenceExpression valuePropRef = new CodePropertyReferenceExpression( fieldsIndexerExpression, "Value"); CodeAssignStatement setStatement = new CodeAssignStatement(valuePropRef, new CodePropertySetValueReferenceExpression()); CodeMethodReturnStatement returnStatement = null; CodeTypeReference returnTypeReference = null; if (returnType != null) { returnTypeReference = new CodeTypeReference(returnType.Name); returnStatement = new CodeMethodReturnStatement(new CodeCastExpression( new CodeTypeReference(returnType.Name), valuePropRef)); } else { switch (field.FieldType) { case FieldType.FieldBlock: returnTypeReference = new CodeTypeReference($"BlockField<{AbideCodeDomGlobals.GetMemberName(field.ReferencedBlock)}>"); returnStatement = new CodeMethodReturnStatement(new CodeCastExpression( returnTypeReference, fieldsIndexerExpression)); setStatement = null; break; } } //Check if (returnStatement == null | returnTypeReference == null) { return; } //Create field property CodeMemberProperty fieldMemberProperty = new CodeMemberProperty() { Attributes = MemberAttributes.Public | MemberAttributes.Final, Name = formattedName, Type = returnTypeReference }; fieldMemberProperty.GetStatements.Add(returnStatement); if (setStatement != null) { fieldMemberProperty.SetStatements.Add(setStatement); } fieldMemberProperty.Comments.Add(new CodeCommentStatement("<summary>", true)); fieldMemberProperty.Comments.Add(new CodeCommentStatement($"Gets or sets the value of the {field.Name} field.", true)); fieldMemberProperty.Comments.Add(new CodeCommentStatement("</summary>", true)); tagGroupCodeTypeDeclaration.Members.Add(fieldMemberProperty); }
private CodeExpression CreateFieldCreateExpression(AbideTagField tagField) { //Prepare CodeExpression[] optionExpressions = null; CodeExpression nameExpression = new CodePrimitiveExpression(tagField.NameObject.ToString()); CodeExpression explanationExpression = new CodePrimitiveExpression(tagField.Explanation ?? string.Empty); CodeExpression groupTagExpression = new CodePrimitiveExpression(tagField.GroupTag); //Check switch (tagField.FieldType) { case FieldType.FieldString: return(new CodeObjectCreateExpression(new CodeTypeReference("StringField"), nameExpression)); case FieldType.FieldLongString: return(new CodeObjectCreateExpression(new CodeTypeReference("LongStringField"), nameExpression)); case FieldType.FieldStringId: return(new CodeObjectCreateExpression(new CodeTypeReference("StringIdField"), nameExpression)); case FieldType.FieldOldStringId: return(new CodeObjectCreateExpression(new CodeTypeReference("OldStringIdField"), nameExpression)); case FieldType.FieldCharInteger: return(new CodeObjectCreateExpression(new CodeTypeReference("CharIntegerField"), nameExpression)); case FieldType.FieldShortInteger: return(new CodeObjectCreateExpression(new CodeTypeReference("ShortIntegerField"), nameExpression)); case FieldType.FieldLongInteger: return(new CodeObjectCreateExpression(new CodeTypeReference("LongIntegerField"), nameExpression)); case FieldType.FieldAngle: return(new CodeObjectCreateExpression(new CodeTypeReference("AngleField"), nameExpression)); case FieldType.FieldTag: return(new CodeObjectCreateExpression(new CodeTypeReference("TagField"), nameExpression)); case FieldType.FieldCharEnum: optionExpressions = new CodeExpression[tagField.Options.Count + 1]; optionExpressions[0] = nameExpression; for (int i = 0; i < tagField.Options.Count; i++) { optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString()); } return(new CodeObjectCreateExpression(new CodeTypeReference("CharEnumField"), optionExpressions)); case FieldType.FieldEnum: optionExpressions = new CodeExpression[tagField.Options.Count + 1]; optionExpressions[0] = nameExpression; for (int i = 0; i < tagField.Options.Count; i++) { optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString()); } return(new CodeObjectCreateExpression(new CodeTypeReference("EnumField"), optionExpressions)); case FieldType.FieldLongEnum: optionExpressions = new CodeExpression[tagField.Options.Count + 1]; optionExpressions[0] = nameExpression; for (int i = 0; i < tagField.Options.Count; i++) { optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString()); } return(new CodeObjectCreateExpression(new CodeTypeReference("LongEnumField"), optionExpressions)); case FieldType.FieldLongFlags: optionExpressions = new CodeExpression[tagField.Options.Count + 1]; optionExpressions[0] = nameExpression; for (int i = 0; i < tagField.Options.Count; i++) { optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString()); } return(new CodeObjectCreateExpression(new CodeTypeReference("LongFlagsField"), optionExpressions)); case FieldType.FieldWordFlags: optionExpressions = new CodeExpression[tagField.Options.Count + 1]; optionExpressions[0] = nameExpression; for (int i = 0; i < tagField.Options.Count; i++) { optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString()); } return(new CodeObjectCreateExpression(new CodeTypeReference("WordFlagsField"), optionExpressions)); case FieldType.FieldByteFlags: optionExpressions = new CodeExpression[tagField.Options.Count + 1]; optionExpressions[0] = nameExpression; for (int i = 0; i < tagField.Options.Count; i++) { optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString()); } return(new CodeObjectCreateExpression(new CodeTypeReference("ByteFlagsField"), optionExpressions)); case FieldType.FieldPoint2D: return(new CodeObjectCreateExpression(new CodeTypeReference("Point2dField"), nameExpression)); case FieldType.FieldRectangle2D: return(new CodeObjectCreateExpression(new CodeTypeReference("Rectangle2dField"), nameExpression)); case FieldType.FieldRgbColor: return(new CodeObjectCreateExpression(new CodeTypeReference("RgbColorField"), nameExpression)); case FieldType.FieldArgbColor: return(new CodeObjectCreateExpression(new CodeTypeReference("ArgbColorField"), nameExpression)); case FieldType.FieldReal: return(new CodeObjectCreateExpression(new CodeTypeReference("RealField"), nameExpression)); case FieldType.FieldRealFraction: return(new CodeObjectCreateExpression(new CodeTypeReference("RealFractionField"), nameExpression)); case FieldType.FieldRealPoint2D: return(new CodeObjectCreateExpression(new CodeTypeReference("RealPoint2dField"), nameExpression)); case FieldType.FieldRealPoint3D: return(new CodeObjectCreateExpression(new CodeTypeReference("RealPoint3dField"), nameExpression)); case FieldType.FieldRealVector2D: return(new CodeObjectCreateExpression(new CodeTypeReference("RealVector2dField"), nameExpression)); case FieldType.FieldRealVector3D: return(new CodeObjectCreateExpression(new CodeTypeReference("RealVector3dField"), nameExpression)); case FieldType.FieldQuaternion: return(new CodeObjectCreateExpression(new CodeTypeReference("QuaternionField"), nameExpression)); case FieldType.FieldEulerAngles2D: return(new CodeObjectCreateExpression(new CodeTypeReference("EulerAngles2dField"), nameExpression)); case FieldType.FieldEulerAngles3D: return(new CodeObjectCreateExpression(new CodeTypeReference("EulerAngles3dField"), nameExpression)); case FieldType.FieldRealPlane2D: return(new CodeObjectCreateExpression(new CodeTypeReference("RealPlane2dField"), nameExpression)); case FieldType.FieldRealPlane3D: return(new CodeObjectCreateExpression(new CodeTypeReference("RealPlane3dField"), nameExpression)); case FieldType.FieldRealRgbColor: return(new CodeObjectCreateExpression(new CodeTypeReference("RealRgbColorField"), nameExpression)); case FieldType.FieldRealArgbColor: return(new CodeObjectCreateExpression(new CodeTypeReference("RealArgbColorField"), nameExpression)); case FieldType.FieldRealHsvColor: return(new CodeObjectCreateExpression(new CodeTypeReference("RealHsvColorField"), nameExpression)); case FieldType.FieldRealAhsvColor: return(new CodeObjectCreateExpression(new CodeTypeReference("RealAhsvColorField"), nameExpression)); case FieldType.FieldShortBounds: return(new CodeObjectCreateExpression(new CodeTypeReference("ShortBoundsField"), nameExpression)); case FieldType.FieldAngleBounds: return(new CodeObjectCreateExpression(new CodeTypeReference("AngleBoundsField"), nameExpression)); case FieldType.FieldRealBounds: return(new CodeObjectCreateExpression(new CodeTypeReference("RealBoundsField"), nameExpression)); case FieldType.FieldRealFractionBounds: return(new CodeObjectCreateExpression(new CodeTypeReference("RealFractionBoundsField"), nameExpression)); case FieldType.FieldTagReference: return(new CodeObjectCreateExpression(new CodeTypeReference("TagReferenceField"), nameExpression, groupTagExpression)); case FieldType.FieldBlock: return(new CodeObjectCreateExpression(new CodeTypeReference($"BlockField<{AbideCodeDomGlobals.GetMemberName(tagField.ReferencedBlock)}>"), nameExpression, new CodePrimitiveExpression(tagField.ReferencedBlock.MaximumElementCount))); case FieldType.FieldLongBlockFlags: return(new CodeObjectCreateExpression(new CodeTypeReference("LongFlagsField"), nameExpression)); case FieldType.FieldWordBlockFlags: return(new CodeObjectCreateExpression(new CodeTypeReference("WordFlagsField"), nameExpression)); case FieldType.FieldByteBlockFlags: return(new CodeObjectCreateExpression(new CodeTypeReference("ByteFlagsField"), nameExpression)); case FieldType.FieldCharBlockIndex1: return(new CodeObjectCreateExpression(new CodeTypeReference("CharBlockIndexField"), nameExpression)); case FieldType.FieldCharBlockIndex2: return(new CodeObjectCreateExpression(new CodeTypeReference("CharBlockIndexField"), nameExpression)); case FieldType.FieldShortBlockIndex1: return(new CodeObjectCreateExpression(new CodeTypeReference("ShortBlockIndexField"), nameExpression)); case FieldType.FieldShortBlockIndex2: return(new CodeObjectCreateExpression(new CodeTypeReference("ShortBlockIndexField"), nameExpression)); case FieldType.FieldLongBlockIndex1: return(new CodeObjectCreateExpression(new CodeTypeReference("LongBlockIndexField"), nameExpression)); case FieldType.FieldLongBlockIndex2: return(new CodeObjectCreateExpression(new CodeTypeReference("LongBlockIndexField"), nameExpression)); case FieldType.FieldData: return(new CodeObjectCreateExpression(new CodeTypeReference("DataField"), nameExpression, new CodePrimitiveExpression(tagField.ElementSize), new CodePrimitiveExpression(tagField.Alignment))); case FieldType.FieldVertexBuffer: return(new CodeObjectCreateExpression(new CodeTypeReference("VertexBufferField"), nameExpression)); case FieldType.FieldPad: return(new CodeObjectCreateExpression(new CodeTypeReference("PadField"), nameExpression, new CodePrimitiveExpression(tagField.Length))); case FieldType.FieldSkip: return(new CodeObjectCreateExpression(new CodeTypeReference("SkipField"), nameExpression, new CodePrimitiveExpression(tagField.Length))); case FieldType.FieldExplanation: return(new CodeObjectCreateExpression(new CodeTypeReference("ExplanationField"), nameExpression, explanationExpression)); case FieldType.FieldStruct: return(new CodeObjectCreateExpression(new CodeTypeReference($"StructField<{AbideCodeDomGlobals.GetMemberName(tagField.ReferencedBlock)}>"), nameExpression)); case FieldType.FieldTagIndex: return(new CodeObjectCreateExpression(new CodeTypeReference("TagIndexField"), nameExpression)); } //Return return(null); }