using DatReaderWriter; using DatReaderWriter.Enums; using DatReaderWriter.Lib.IO; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; // Phase O-T7: verbatim copy of WorldBuilder.Shared.Services.IDatReaderWriter + // IDatDatabase into the AcDream.App.Rendering.Wb namespace so the // WorldBuilder.Shared project reference can be dropped. // The only consumer of IDatReaderWriter in acdream is DatCollectionAdapter + // ObjectMeshManager, both already in this namespace. namespace AcDream.App.Rendering.Wb; /// /// Interface for the dat reader/writer /// public interface IDatReaderWriter : IDisposable { /// /// Gets the source directory of the DAT files. /// string SourceDirectory { get; } /// /// Tries to get the raw bytes of a file from a specific region database. /// bool TryGetFileBytes(uint regionId, uint fileId, ref byte[] bytes, out int bytesRead); /// /// The portal database /// IDatDatabase Portal { get; } /// /// The cell region databases. Each key is a cell region ID /// ReadOnlyDictionary CellRegions { get; } /// /// The high res database /// IDatDatabase HighRes { get; } /// /// The language database /// IDatDatabase Language { get; } /// /// A mapping of region ids to region dat file entry ids. key: region id, value: region dat file entry /// ReadOnlyDictionary RegionFileMap { get; } /// /// Gets the current portal iteration. /// int PortalIteration { get; } /// /// Gets the current cell iteration (from the first cell region). /// int CellIteration { get; } /// /// Gets the current high res iteration. /// int HighResIteration { get; } /// /// Gets the current language iteration. /// int LanguageIteration { get; } // Write-path methods — preserved from WB's interface for verbatim // compatibility but not exercised by ObjectMeshManager in acdream. /// Attempts to save a database object to the appropriate DAT. bool TrySave(T obj, int iteration = 0) where T : IDBObj; /// Attempts to save a database object to the appropriate DAT for a specific region. bool TrySave(uint regionId, T obj, int iteration = 0) where T : IDBObj; /// /// Resolution of a data ID to a database and type /// public record IdResolution(IDatDatabase Database, DBObjType Type); /// /// Resolves a data ID to all possible databases and types. /// public IEnumerable ResolveId(uint id); } /// /// Interface for a dat database, providing methods to retrieve files and objects. /// public interface IDatDatabase : IDisposable { DatDatabase Db { get; } /// Retrieves the current iteration of the database. int Iteration { get; } /// Retrieves all file IDs of a specific type. public IEnumerable GetAllIdsOfType() where T : IDBObj; /// Attempts to retrieve a database object by its file ID. public bool TryGet(uint fileId, [MaybeNullWhen(false)] out T value) where T : IDBObj; /// Attempts to retrieve the raw bytes of a file by its ID. bool TryGetFileBytes(uint fileId, [MaybeNullWhen(false)] out byte[] value); /// Attempts to retrieve the raw bytes of a file by its ID into a provided buffer. bool TryGetFileBytes(uint fileId, ref byte[] bytes, out int bytesRead); /// Attempts to save a database object. bool TrySave(T obj, int iteration = 0) where T : IDBObj; }