Пример #1
0
        /// <summary>
        /// Global factory helper
        /// </summary>
        /// <param name="frame">Frame to read from</param>
        /// <param name="getter">Func factory to create Global given data type char</param>
        /// <returns>Constructed Global from getter</returns>
        /// <exception cref="ArgumentException">If frame aligned to a malformed Global record</exception>
        public static T Create <T>(
            MutagenFrame frame,
            Func <MutagenFrame, char?, T> getter)
            where T : IMajorRecordCommon, IGlobalCommon
        {
            var initialPos = frame.Position;
            var majorMeta  = frame.GetMajorRecordFrame();

            if (majorMeta.RecordType != GLOB)
            {
                throw new ArgumentException();
            }

            T g = getter(frame, GetGlobalChar(majorMeta));

            frame.Reader.Position = initialPos + frame.MetaData.Constants.MajorConstants.TypeAndLengthLength;

            // Read data
            var fltvLoc = PluginUtilityTranslation.FindFirstSubrecord(majorMeta.Content, frame.MetaData.Constants, FLTV, navigateToContent: true);

            if (fltvLoc == null)
            {
                throw new ArgumentException($"Could not find FLTV.");
            }
            g.RawFloat = majorMeta.Content.Slice(fltvLoc.Value).Float();

            // Skip to end
            frame.Reader.Position = initialPos + majorMeta.TotalLength;
            return(g);
        }
Пример #2
0
        public static ADamageType CreateFromBinary(
            MutagenFrame frame,
            RecordTypeConverter recordTypeConverter)
        {
            var majorMeta = frame.GetMajorRecordFrame();

            if (majorMeta.FormVersion >= 78)
            {
                return(DamageType.CreateFromBinary(frame, recordTypeConverter));
            }
            else
            {
                return(DamageTypeIndexed.CreateFromBinary(frame, recordTypeConverter));
            }
        }
Пример #3
0
        public static ADamageType CreateFromBinary(
            MutagenFrame frame,
            TypedParseParams?translationParams)
        {
            var majorMeta = frame.GetMajorRecordFrame();

            if (majorMeta.FormVersion >= 78)
            {
                return(DamageType.CreateFromBinary(frame, translationParams));
            }
            else
            {
                return(DamageTypeIndexed.CreateFromBinary(frame, translationParams));
            }
        }