Beispiel #1
0
        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
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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());
            }
        }
Beispiel #4
0
        public static int CalculateOffsetOfField(List <MoonfishTagField> fields, MoonfishTagField field)
        {
            var count = fields.IndexOf(field);

            return(CalculateSizeOfFieldSet(fields.GetRange(0, count)));
        }