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(); } }
public RegionLand DeepCopy( IRegionLandGetter item, RegionLand.TranslationMask?copyMask = null) { RegionLand ret = (RegionLand)((RegionLandCommon)((IRegionLandGetter)item).CommonInstance() !).GetNew(); ((RegionLandSetterTranslationCommon)((IRegionLandGetter)ret).CommonSetterTranslationInstance() !).DeepCopyIn( item: ret, rhs: item, errorMask: null, copyMask: copyMask?.GetCrystal(), deepCopy: true); return(ret); }
public RegionLand DeepCopy( IRegionLandGetter item, ErrorMaskBuilder?errorMask, TranslationCrystal?copyMask = null) { RegionLand ret = (RegionLand)((RegionLandCommon)((IRegionLandGetter)item).CommonInstance() !).GetNew(); ((RegionLandSetterTranslationCommon)((IRegionLandGetter)ret).CommonSetterTranslationInstance() !).DeepCopyIn( item: ret, rhs: item, errorMask: errorMask, copyMask: copyMask, deepCopy: true); return(ret); }
public RegionLand DeepCopy( IRegionLandGetter item, out RegionLand.ErrorMask errorMask, RegionLand.TranslationMask?copyMask = null) { var errorMaskBuilder = new ErrorMaskBuilder(); RegionLand ret = (RegionLand)((RegionLandCommon)((IRegionLandGetter)item).CommonInstance() !).GetNew(); ((RegionLandSetterTranslationCommon)((IRegionLandGetter)ret).CommonSetterTranslationInstance() !).DeepCopyIn( ret, item, errorMask: errorMaskBuilder, copyMask: copyMask?.GetCrystal(), deepCopy: true); errorMask = RegionLand.ErrorMask.Factory(errorMaskBuilder); return(ret); }
public override object GetNew() { return(RegionLand.GetNew()); }