/// <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); }
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)); } }
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)); } }