Пример #1
0
            public static GlobalBinaryOverlay GlobalFactory(
                OverlayStream stream,
                BinaryOverlayFactoryPackage package,
                RecordTypeConverter recordTypeConverter)
            {
                var majorFrame = package.MetaData.Constants.MajorRecordFrame(stream.RemainingMemory);
                var globalChar = GlobalCustomParsing.GetGlobalChar(majorFrame);

                switch (globalChar)
                {
                case GlobalInt.TRIGGER_CHAR:
                    return(GlobalIntBinaryOverlay.GlobalIntFactory(
                               stream,
                               package));

                case GlobalShort.TRIGGER_CHAR:
                    return(GlobalShortBinaryOverlay.GlobalShortFactory(
                               stream,
                               package));

                case GlobalFloat.TRIGGER_CHAR:
                    return(GlobalFloatBinaryOverlay.GlobalFloatFactory(
                               stream,
                               package));

                default:
                    throw new ArgumentException($"Unknown trigger char: {globalChar}");
                }
            }
Пример #2
0
        public void UnrelatedStandard()
        {
            RecordTypeConverter conv = new RecordTypeConverter(
                new KeyValuePair <RecordType, RecordType>(RecordTypes.DATA, RecordTypes.MAST));

            Assert.Equal(RecordTypes.EDID, RecordTypeConverterExt.ConvertToStandard(conv, RecordTypes.EDID));
        }
Пример #3
0
        public void CollidingStandard()
        {
            RecordTypeConverter conv = new RecordTypeConverter(
                new KeyValuePair <RecordType, RecordType>(RecordTypes.DATA, RecordTypes.MAST));

            Assert.Equal(RecordType.Null, RecordTypeConverterExt.ConvertToStandard(conv, RecordTypes.DATA));
        }
Пример #4
0
        public static Global CreateFromBinary(
            MutagenFrame frame,
            RecordTypeConverter recordTypeConverter)
        {
            return(GlobalCustomParsing.Create <Global>(
                       frame,
                       getter: (f, triggerChar) =>
            {
                switch (triggerChar)
                {
                case GlobalInt.TRIGGER_CHAR:
                    return GlobalInt.CreateFromBinary(f);

                case GlobalShort.TRIGGER_CHAR:
                    return GlobalShort.CreateFromBinary(f);

                case GlobalFloat.TRIGGER_CHAR:
                    return GlobalFloat.CreateFromBinary(f);

                case null:
                    var ret = GlobalFloat.CreateFromBinary(f);
                    ret.NoTypeDeclaration = true;
                    return ret;

                default:
                    throw new ArgumentException($"Unknown trigger char: {triggerChar}");
                }
            }));
        }
Пример #5
0
        public void TypicalCustom()
        {
            RecordTypeConverter conv = new RecordTypeConverter(
                new KeyValuePair <RecordType, RecordType>(RecordTypes.DATA, RecordTypes.MAST));

            Assert.Equal(RecordTypes.MAST, RecordTypeConverterExt.ConvertToCustom(conv, RecordTypes.DATA));
        }
Пример #6
0
        public override async Task Load(XElement node, bool requireName = true)
        {
            await base.Load(node, requireName);

            if (node.TryGetAttribute <string>("maleMarker", out var maleMarker))
            {
                MaleMarker = new RecordType(maleMarker);
            }

            if (node.TryGetAttribute <string>("femaleMarker", out var femaleMarker))
            {
                FemaleMarker = new RecordType(femaleMarker);
            }

            if (MaleMarker.HasValue != FemaleMarker.HasValue)
            {
                throw new ArgumentException("Both submarkers must be set at once.");
            }

            this.MarkerPerGender = node.GetAttribute <bool>("markerPerGender");

            if (MaleMarker.HasValue)
            {
                this.SubTypeGeneration.NullableProperty.OnNext((true, true));
            }

            FemaleConversions = RecordTypeConverterModule.GetConverter(node.Element(XName.Get("FemaleTypeOverrides", LoquiGenerator.Namespace)));
            MaleConversions   = RecordTypeConverterModule.GetConverter(node.Element(XName.Get("MaleTypeOverrides", LoquiGenerator.Namespace)));
        }
Пример #7
0
 public static IReadOnlyList <T> FactoryForLoqui <T>(
     ReadOnlyMemorySlice <byte> mem,
     int amount,
     int length,
     BinaryOverlayFactoryPackage package,
     RecordTypeConverter recordTypeConverter,
     PluginBinaryOverlay.ConverterFactory <T> getter)
 {
     return(new NumberedLoquiList <T>(mem, amount, length, package, recordTypeConverter, getter));
 }
Пример #8
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));
            }
        }
Пример #9
0
 public NumberedLoquiList(
     ReadOnlyMemorySlice <byte> mem,
     int amount,
     int length,
     BinaryOverlayFactoryPackage package,
     RecordTypeConverter recordTypeConverter,
     PluginBinaryOverlay.ConverterFactory <T> getter)
 {
     this.Amount              = amount;
     this.Memory              = mem;
     this.Length              = length;
     this.Package             = package;
     this.Getter              = getter;
     this.RecordTypeConverter = recordTypeConverter;
 }
Пример #10
0
            public static ADamageTypeBinaryOverlay ADamageTypeFactory(
                OverlayStream stream,
                BinaryOverlayFactoryPackage package,
                RecordTypeConverter recordTypeConverter)
            {
                var majorFrame = package.MetaData.Constants.MajorRecordFrame(stream.RemainingMemory);

                if (majorFrame.FormVersion >= 78)
                {
                    return(DamageTypeBinaryOverlay.DamageTypeFactory(stream, package, recordTypeConverter));
                }
                else
                {
                    return(DamageTypeIndexedBinaryOverlay.DamageTypeIndexedFactory(stream, package, recordTypeConverter));
                }
            }
 public static GenderedItem <TItem?> Parse <TItem>(
     MutagenFrame frame,
     BinaryMasterParseDelegate <TItem> transl,
     RecordTypeConverter femaleRecordConverter,
     RecordTypeConverter?maleRecordConverter = null)
     where TItem : class
 {
     if (!transl(frame, out var male, maleRecordConverter))
     {
         male = null;
     }
     if (!transl(frame, out var female, femaleRecordConverter))
     {
         female = null;
     }
     return(new GenderedItem <TItem?>(male, female));
 }
Пример #12
0
 public static TypedParseParams With(this TypedParseParams?param, RecordTypeConverter conv, int?lengthOverride)
 {
     return(new TypedParseParams(
                lengthOverride: lengthOverride,
                recordTypeConverter: conv));
 }
Пример #13
0
 public static void GenerateConverterMember(FileGeneration fg, ObjectGeneration objGen, RecordTypeConverter recordTypeConverter, string nickName)
 {
     if (recordTypeConverter == null || recordTypeConverter.FromConversions.Count == 0)
     {
         return;
     }
     using (var args = new ArgsWrapper(fg,
                                       $"public static RecordTypeConverter {nickName}Converter = new RecordTypeConverter"))
     {
         foreach (var conv in recordTypeConverter.FromConversions)
         {
             args.Add((gen) =>
             {
                 using (var args2 = new FunctionWrapper(gen,
                                                        "new KeyValuePair<RecordType, RecordType>"))
                 {
                     args2.Add($"new RecordType(\"{conv.Key.Type}\")");
                     args2.Add($"new RecordType(\"{conv.Value.Type}\")");
                 }
             });
         }
     }
 }
Пример #14
0
 public static TypedWriteParams With(this TypedWriteParams?converter, RecordTypeConverter conv)
 {
     return(new TypedWriteParams(
                recordTypeConverter: conv,
                overflowRecordType: converter?.OverflowRecordType));
 }