Example #1
0
            public static Furniture.Flag FillBinaryFlags2(IMutagenReadStream stream, Func <int, FurnitureMarker> getter, Furniture.Flag?existingFlag)
            {
                var  subFrame = stream.ReadSubrecordFrame();
                uint raw      = BinaryPrimitives.ReadUInt32LittleEndian(subFrame.Content);

                // Clear out upper bytes of existing flags
                var curFlags = (uint)(existingFlag ?? 0);

                curFlags &= ~UpperFlagsMask;

                // Add in new upper flags
                uint upperFlags = raw & UpperFlagsMask;
                var  ret        = (Furniture.Flag)(curFlags | upperFlags);

                // Create marker objects for sit flags
                uint markers      = raw & 0x00FF_FFFF;
                uint indexToCheck = 1;

                for (int i = 0; i < NumSits; i++)
                {
                    var has = EnumExt.HasFlag(markers, indexToCheck);
                    indexToCheck <<= 1;
                    if (!has)
                    {
                        continue;
                    }
                    var marker = getter(i);
                    marker.Enabled = true;
                }
                return(ret);
            }
Example #2
0
            public static void FillCloudTexture(IMutagenReadStream stream, RecordType nextRecordType, string?[] textures)
            {
                int layer = nextRecordType.TypeInt - TextureIntBase;

                if (layer > 29 || layer < 0)
                {
                    throw new ArgumentException();
                }
                var subRec = stream.ReadSubrecordFrame();

                textures[layer] = BinaryStringUtility.ProcessWholeToZString(subRec.Content, stream.MetaData.Encodings.NonTranslated);
            }
Example #3
0
 public static ExtendedList<IFormLinkGetter<IIdleAnimationGetter>> ParseAnimations(IMutagenReadStream stream)
 {
     var subFrame = stream.ReadSubrecordFrame();
     var ret = new ExtendedList<IFormLinkGetter<IIdleAnimationGetter>>();
     int pos = 0;
     while (pos < subFrame.Content.Length)
     {
         ret.Add(
             new FormLink<IIdleAnimationGetter>(
                 FormKeyBinaryTranslation.Instance.Parse(subFrame.Content.Slice(pos), stream.MetaData.MasterReferences!)));
         pos += 4;
     }
     return ret;
 }
Example #4
0
        public void PerkStringHandler(
            IMutagenReadStream stream,
            MajorRecordHeader major,
            BinaryFileProcessor.ConfigConstructor instr,
            List <KeyValuePair <uint, uint> > processedStrings,
            IStringsLookup overlay,
            ref uint newIndex)
        {
            var  majorCompletePos = stream.Position + major.ContentLength;
            long?lastepft         = null;

            while (stream.Position < majorCompletePos)
            {
                var sub = stream.GetSubrecord();
                switch (sub.RecordTypeInt)
                {
                case RecordTypeInts.FULL:
                case RecordTypeInts.EPF2:
                    AStringsAlignment.ProcessStringLink(stream, instr, processedStrings, overlay, ref newIndex);
                    break;

                case RecordTypeInts.EPFT:
                    lastepft = stream.Position;
                    break;

                case RecordTypeInts.EPFD:
                    var pos = stream.Position;
                    stream.Position = lastepft.Value;
                    var epftFrame = stream.ReadSubrecordFrame();
                    if (epftFrame.Content[0] == (byte)APerkEntryPointEffect.ParameterType.LString)
                    {
                        stream.Position = pos;
                        AStringsAlignment.ProcessStringLink(stream, instr, processedStrings, overlay, ref newIndex);
                    }
                    stream.Position = pos;
                    break;

                default:
                    break;
                }
                stream.Position += sub.TotalLength;
            }
        }