#include "LoaderQdbT6.h" #include "Game/T6/T6.h" #include using namespace T6; namespace { class QdbLoader final : public AssetCreator { public: QdbLoader(MemoryManager& memory, ISearchPath& searchPath) : m_memory(memory), m_search_path(searchPath) { } AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { const auto file = m_search_path.Open(assetName); if (!file.IsOpen()) return AssetCreationResult::Failure(); auto* qdb = m_memory.Alloc(); qdb->name = m_memory.Dup(assetName.c_str()); qdb->len = static_cast(file.m_length); auto* fileBuffer = m_memory.Alloc(static_cast(file.m_length + 1)); file.m_stream->read(fileBuffer, file.m_length); if (file.m_stream->gcount() != file.m_length) return AssetCreationResult::Failure(); fileBuffer[qdb->len] = '\0'; qdb->buffer = static_cast(fileBuffer); return AssetCreationResult::Success(context.AddAsset(assetName, qdb)); } private: MemoryManager& m_memory; ISearchPath& m_search_path; }; } // namespace namespace T6 { std::unique_ptr> CreateQdbLoader(MemoryManager& memory, ISearchPath& searchPath) { return std::make_unique(memory, searchPath); } } // namespace T6