private void ProcessArrayFields(IList <MoonfishTagField> fields, ElementArray elementArray, MoonfishTagField field, ref int i, ref int offset) { var name = field.Strings; ++i; //move past field_type._field_array_start for (var index = 0; index < field.Count; ++index) { var startindex = i; ProcessFields(fields, elementArray, ref startindex, ref offset); } ++i; // move past field_type._field_array_end }
public MoonfishTagDefinition(TagBlockDefinition definition) : this() { Name = definition.Name; DisplayName = definition.DisplayName; MaximumElementCount = definition.maximum_element_count; Alignment = definition.LatestFieldSet.Alignment; var definitionFields = definition.LatestFieldSet.Fields; Fields = new List <MoonfishTagField>(definitionFields.Count); foreach (var field in definitionFields) { var moonfishField = new MoonfishTagField((MoonfishFieldType)field.type, field.Name); moonfishField.AssignCount(field.definition); if (field.Definition is TagBlockDefinition) { var fieldDefinition = (TagBlockDefinition)field.Definition; moonfishField.AssignDefinition(new MoonfishTagDefinition(fieldDefinition)); } if (field.Definition is enum_definition) { var fieldDefinition = (enum_definition)field.Definition; moonfishField.AssignDefinition(new MoonfishTagEnumDefinition(fieldDefinition)); } if (field.Definition is tag_struct_definition) { var fieldDefinition = (tag_struct_definition)field.Definition; moonfishField.AssignDefinition(new MoonfishTagStruct(fieldDefinition)); } if (field.Definition is tag_data_definition) { var fieldDefinition = (tag_data_definition)field.Definition; moonfishField.AssignDefinition(new MoonfishTagDataDefinition(fieldDefinition)); } if (field.Definition is tag_reference_definition) { var fieldDefinition = (tag_reference_definition)field.Definition; moonfishField.AssignDefinition(new MoonfishTagReferenceDefinition(fieldDefinition)); } if (field.Definition is string) { moonfishField.AssignDefinition((string)field.Definition); } Fields.Add(moonfishField); } Fields = new List <MoonfishTagField>(Guerilla.PostProcess(Name, Fields)); }
public static int CalculateSizeOfField(MoonfishTagField field) { switch (field.Type) { case MoonfishFieldType.FieldStruct: { var struct_definition = (MoonfishTagStruct)field.Definition; var blockDefinition = struct_definition.Definition; return(CalculateSizeOfFieldSet(blockDefinition.Fields)); } case MoonfishFieldType.FieldSkip: case MoonfishFieldType.FieldPad: return(field.Count); default: return(field.Type.GetFieldSize()); } }
public static int CalculateOffsetOfField(List <MoonfishTagField> fields, MoonfishTagField field) { var count = fields.IndexOf(field); return(CalculateSizeOfFieldSet(fields.GetRange(0, count))); }