Exemple #1
0
 public static void FillBinaryStructs(
     IRegionInternal item,
     MutagenFrame frame)
 {
     Fallout4MajorRecordBinaryCreateTranslation.FillBinaryStructs(
         item: item,
         frame: frame);
 }
Exemple #2
0
        static void ParseRegionData(MutagenFrame frame, IRegionInternal item)
        {
            var rdatFrame = frame.GetSubrecordFrame();

            RegionData.RegionDataType dataType = (RegionData.RegionDataType)BinaryPrimitives.ReadUInt32LittleEndian(rdatFrame.Content);
            var subMeta = frame.GetSubrecord(offset: rdatFrame.TotalLength);
            int len     = rdatFrame.TotalLength;

            if (IsExpected(dataType, subMeta.RecordType))
            {
                len += subMeta.TotalLength;
            }
            switch (dataType)
            {
            case RegionData.RegionDataType.Object:
                item.Objects = RegionObjects.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                break;

            case RegionData.RegionDataType.Map:
                item.MapName = RegionMap.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                break;

            case RegionData.RegionDataType.Grass:
                item.Grasses = RegionGrasses.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                break;

            case RegionData.RegionDataType.Sound:
                if (frame.Reader.TryGetSubrecord(out var nextRec, offset: len) &&
                    (nextRec.RecordType.Equals(RDSD) || nextRec.RecordType.Equals(RDMD)))
                {
                    len += nextRec.TotalLength;
                }
                item.Sounds = RegionSounds.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                break;

            case RegionData.RegionDataType.Weather:
                item.Weather = RegionWeather.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                break;

            case RegionData.RegionDataType.Icon:
                frame.Position += frame.MetaData.Constants.SubConstants.HeaderLength + rdatFrame.TotalLength;
                len             = len - frame.MetaData.Constants.SubConstants.HeaderLength - rdatFrame.TotalLength;
                if (StringBinaryTranslation.Instance.Parse(
                        frame.SpawnWithLength(len, checkFraming: false),
                        out var iconVal))
                {
                    item.Icon = iconVal;
                }
                else
                {
                    item.Icon = null;
                }
                break;

            default:
                throw new NotImplementedException();
            }
        }
Exemple #3
0
            static void ParseRegionData(MutagenFrame frame, IRegionInternal item)
            {
                var rdatFrame = frame.Reader.GetSubrecordFrame();
                int len       = rdatFrame.TotalLength;

                RegionData.RegionDataType dataType = (RegionData.RegionDataType)BinaryPrimitives.ReadUInt32LittleEndian(rdatFrame.Content);

                if (frame.Reader.TryGetSubrecord(out var subMeta, offset: len))
                {
                    var recType = subMeta.RecordType;
                    if (recType == RecordTypes.ICON)
                    {
                        len += subMeta.TotalLength;
                        // Skip icon subrecord for now
                        subMeta = frame.Reader.GetSubrecord(offset: rdatFrame.TotalLength + subMeta.TotalLength);
                    }
                    if (IsExpected(dataType, recType))
                    {
                        len += subMeta.TotalLength;
                    }
                }

                switch (dataType)
                {
                case RegionData.RegionDataType.Object:
                    item.Objects = RegionObjects.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                    break;

                case RegionData.RegionDataType.Map:
                    item.Map = RegionMap.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                    break;

                case RegionData.RegionDataType.Grass:
                    item.Grasses = RegionGrasses.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                    break;

                case RegionData.RegionDataType.Sound:
                    if (frame.Reader.TryGetSubrecord(out var nextRec, offset: len) &&
                        (nextRec.RecordType.Equals(RDSA) || nextRec.RecordType.Equals(RDMO)))
                    {
                        len += nextRec.TotalLength;
                    }
                    item.Sounds = RegionSounds.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                    break;

                case RegionData.RegionDataType.Weather:
                    item.Weather = RegionWeather.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                    break;

                case RegionData.RegionDataType.Land:
                    item.Land = RegionLand.CreateFromBinary(frame.SpawnWithLength(len, checkFraming: false));
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
Exemple #4
0
 public static void CopyInFromBinary(
     this IRegionInternal item,
     MutagenFrame frame,
     TypedParseParams?translationParams = null)
 {
     ((RegionSetterCommon)((IRegionGetter)item).CommonSetterInstance() !).CopyInFromBinary(
         item: item,
         frame: frame,
         translationParams: translationParams);
 }
Exemple #5
0
 public virtual void CopyInFromBinary(
     IRegionInternal item,
     MutagenFrame frame,
     TypedParseParams?translationParams = null)
 {
     PluginUtilityTranslation.MajorRecordParse <IRegionInternal>(
         record: item,
         frame: frame,
         translationParams: translationParams,
         fillStructs: RegionBinaryCreateTranslation.FillBinaryStructs,
         fillTyped: RegionBinaryCreateTranslation.FillBinaryRecordTypes);
 }
Exemple #6
0
 public static void DeepCopyIn(
     this IRegionInternal lhs,
     IRegionGetter rhs,
     ErrorMaskBuilder?errorMask,
     TranslationCrystal?copyMask)
 {
     ((RegionSetterTranslationCommon)((IRegionGetter)lhs).CommonSetterTranslationInstance() !).DeepCopyIn(
         item: lhs,
         rhs: rhs,
         errorMask: errorMask,
         copyMask: copyMask,
         deepCopy: false);
 }
Exemple #7
0
        static partial void FillBinaryRegionAreaLogicCustom(MutagenFrame frame, IRegionInternal item)
        {
            var rdat = HeaderTranslation.GetNextSubrecordType(frame.Reader, out var rdatType);

            while (rdat.Equals(RecordTypes.RDAT))
            {
                ParseRegionData(frame, item);
                if (frame.Complete)
                {
                    break;
                }
                rdat = HeaderTranslation.GetNextSubrecordType(frame.Reader, out rdatType);
            }
        }
Exemple #8
0
 public void DeepCopyIn(
     IRegionInternal item,
     IRegionGetter rhs,
     ErrorMaskBuilder?errorMask,
     TranslationCrystal?copyMask,
     bool deepCopy)
 {
     base.DeepCopyIn(
         item,
         rhs,
         errorMask,
         copyMask,
         deepCopy: deepCopy);
 }
Exemple #9
0
        public static void DeepCopyIn(
            this IRegionInternal lhs,
            IRegionGetter rhs,
            out Region.ErrorMask errorMask,
            Region.TranslationMask?copyMask = null)
        {
            var errorMaskBuilder = new ErrorMaskBuilder();

            ((RegionSetterTranslationCommon)((IRegionGetter)lhs).CommonSetterTranslationInstance() !).DeepCopyIn(
                item: lhs,
                rhs: rhs,
                errorMask: errorMaskBuilder,
                copyMask: copyMask?.GetCrystal(),
                deepCopy: false);
            errorMask = Region.ErrorMask.Factory(errorMaskBuilder);
        }
Exemple #10
0
 public void Clear(IRegionInternal item)
 {
     ClearPartial();
     base.Clear(item);
 }
Exemple #11
0
 public static void Clear(this IRegionInternal item)
 {
     ((RegionSetterCommon)((IRegionGetter)item).CommonSetterInstance() !).Clear(item: item);
 }