private DecimaCoreFile(byte[] unknown1, DecimaCoreFile parent)
 {
     BaseStream  = new MemoryStream(unknown1);
     Header      = parent.Header;
     IsDirtyData = true;
     Checksum    = Header.GetChecksum();
 }
Beispiel #2
0
        public void Read(DecimaCoreFile file, DecimaManagerCollection manager)
        {
            // ReSharper disable once MergeConditionalExpression
            var streamData = StreamData == default ? Span <byte> .Empty : StreamData.Data.Span.Slice(0, StreamedImageSize);

            Data = new TextureBase(ImageData, streamData, Format, Width & 0xFFF, Height & 0xFFF, TotalMips, StreamedMips);
        }
Beispiel #3
0
 /// <summary>
 /// </summary>
 /// <param name="data"></param>
 /// <param name="managers"></param>
 /// <exception cref="InvalidDataException"></exception>
 public void Work(DecimaCoreFile data, DecimaManagerCollection managers)
 {
     if (data.FileType != DecimaFileTypeMagic.Texture)
     {
         throw new InvalidDataException("This is not a texture file");
     }
     Core = data;
 }
 public void Read(DecimaCoreFile file, DecimaManagerCollection manager)
 {
     TextureData.ElementAt(0).Data.Name = Name1;
     if (TextureData.Length == 2)
     {
         TextureData.ElementAt(1).Data.Name = Name2;
     }
     Textures = TextureData.Select(x => x.Data).ToArray();
 }
 private DecimaCoreFile(Stream buffer, DecimaCoreHeader header, byte[] unknown1, DecimaCoreFile parent)
 {
     BaseStream = buffer;
     Header     = header;
     Checksum   = Header.GetChecksum();
     IsSplit    = true;
     Parent     = parent;
     Unknown1   = unknown1?.Length > 0 ? new DecimaCoreFile(unknown1, this) : null;
 }
 /// <summary>
 ///     Load prefetch data by stream
 /// </summary>
 /// <param name="data"></param>
 /// <param name="managers"></param>
 /// <exception cref="InvalidDataException">when data magic does not match file type</exception>
 public void Work(DecimaCoreFile data, DecimaManagerCollection managers)
 {
     if (IsValid)
     {
         return;
     }
     if (data.FileType != DecimaFileTypeMagic.Prefetch)
     {
         throw new InvalidDataException("This is not a prefetch file");
     }
     Core = data;
 }
        /// <inheritdoc />
        /// <summary>
        ///     Load core file by stream
        /// </summary>
        /// <param name="buffer"></param>
        public DecimaCoreFile(Stream buffer)
        {
            BaseStream = buffer;
            Header     = StreamHelper.Read <DecimaCoreHeader>(buffer);
            Checksum   = Header.GetChecksum();

            if (DirtyCoreTypes.TryGetValue(Header.FileTypeMagic, out var dirtyBytes))
            {
                BaseStream.Position -= 0x10;
                var unkData = StreamHelper.Read <byte>(BaseStream, dirtyBytes);
                Header.SetChecksum(StreamHelper.Read <byte>(BaseStream, 0x10));
                Unknown1 = new DecimaCoreFile(unkData, this);
            }
        }
Beispiel #8
0
        public void Read(DecimaCoreFile file, DecimaManagerCollection manager)
        {
            var entriesActual = new List <DecimaCoreFileRef <IDecimaStructuredFile> >();

            foreach (var entry in EntryRefsOriginal)
            {
                if (entry.LoadMethod == DecimaCoreLoadMethod.ImmediateCoreFile && entry.Ref?.FileType == DecimaFileTypeMagic.Collection)
                {
                    entriesActual.AddRange(entry.Ref.ToStructured <DecimaCollection>(manager).EntryRefs);
                }
                else
                {
                    entriesActual.Add(entry);
                }
            }
            EntryRefs = entriesActual.ToArray();

            Entries = EntryRefs.Select(x => x.GetStruct(manager)).ToArray();
        }
        public void Read(DecimaCoreFile file, DecimaManagerCollection manager)
        {
            Managers = manager;
            switch (LoadMethod)
            {
            case DecimaCoreLoadMethod.WorkOnly:
            case DecimaCoreLoadMethod.NotPresent:
                break;

            case DecimaCoreLoadMethod.Embedded:
                RefData = file.Split().FirstOrDefault(x => x.Checksum == Checksum);
                Debug.Assert(RefData != default, "Ref != default", nameof(DecimaCoreLoadMethod.Embedded));
                break;

            case DecimaCoreLoadMethod.ImmediateCoreFile:
            case DecimaCoreLoadMethod.CoreFile:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Beispiel #10
0
 public void Read(DecimaCoreFile file, DecimaManagerCollection manager)
 {
 }
Beispiel #11
0
 public void Read(DecimaCoreFile file, DecimaManagerCollection manager)
 {
     TextureData.Data.Name = Name;
     Textures = new[] { TextureData.Data };
 }
 public void Read(DecimaCoreFile file, DecimaManagerCollection manager)
 {
     IsValid = true;
 }