private DecimaCoreFile(byte[] unknown1, DecimaCoreFile parent) { BaseStream = new MemoryStream(unknown1); Header = parent.Header; IsDirtyData = true; Checksum = Header.GetChecksum(); }
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); }
/// <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); } }
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(); } }
public void Read(DecimaCoreFile file, DecimaManagerCollection manager) { }
public void Read(DecimaCoreFile file, DecimaManagerCollection manager) { TextureData.Data.Name = Name; Textures = new[] { TextureData.Data }; }
public void Read(DecimaCoreFile file, DecimaManagerCollection manager) { IsValid = true; }