mirror of
				https://github.com/Laupetin/OpenAssetTools.git
				synced 2025-10-30 18:17:15 +00:00 
			
		
		
		
	Merge branch 'Laupetin:main' into main
This commit is contained in:
		| @@ -22,7 +22,7 @@ bool AssetLoaderLocalizeEntry::CanLoadFromRaw() const | ||||
| bool AssetLoaderLocalizeEntry::LoadFromRaw( | ||||
|     const std::string& assetName, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager, Zone* zone) const | ||||
| { | ||||
|     LocalizeCommonAssetLoader commonLoader( | ||||
|     const LocalizeCommonAssetLoader commonLoader( | ||||
|         [memory, manager](const CommonLocalizeEntry& entry) | ||||
|         { | ||||
|             auto* localizeEntry = memory->Create<LocalizeEntry>(); | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
| #include "Game/T6/CommonT6.h" | ||||
| #include "Game/T6/T6.h" | ||||
| #include "Pool/GlobalAssetPool.h" | ||||
| #include "StringTable/StringTableLoader.h" | ||||
|  | ||||
| #include <cstring> | ||||
|  | ||||
| @@ -29,65 +30,8 @@ bool AssetLoaderStringTable::LoadFromRaw( | ||||
|     if (!file.IsOpen()) | ||||
|         return false; | ||||
|  | ||||
|     auto* stringTable = memory->Create<StringTable>(); | ||||
|     stringTable->name = memory->Dup(assetName.c_str()); | ||||
|  | ||||
|     std::vector<std::vector<std::string>> csvLines; | ||||
|     std::vector<std::string> currentLine; | ||||
|     auto maxCols = 0u; | ||||
|     const CsvInputStream csv(*file.m_stream); | ||||
|  | ||||
|     while (csv.NextRow(currentLine)) | ||||
|     { | ||||
|         if (currentLine.size() > maxCols) | ||||
|             maxCols = currentLine.size(); | ||||
|         csvLines.emplace_back(std::move(currentLine)); | ||||
|         currentLine = std::vector<std::string>(); | ||||
|     } | ||||
|  | ||||
|     stringTable->columnCount = static_cast<int>(maxCols); | ||||
|     stringTable->rowCount = static_cast<int>(csvLines.size()); | ||||
|     const auto cellCount = static_cast<unsigned>(stringTable->rowCount) * static_cast<unsigned>(stringTable->columnCount); | ||||
|  | ||||
|     if (cellCount) | ||||
|     { | ||||
|         stringTable->values = static_cast<StringTableCell*>(memory->Alloc(sizeof(StringTableCell) * cellCount)); | ||||
|         stringTable->cellIndex = static_cast<int16_t*>(memory->Alloc(sizeof(int16_t) * cellCount)); | ||||
|  | ||||
|         for (auto c = 0u; c < cellCount; c++) | ||||
|             stringTable->cellIndex[c] = static_cast<int16_t>(c); | ||||
|  | ||||
|         for (auto row = 0u; row < csvLines.size(); row++) | ||||
|         { | ||||
|             const auto& rowValues = csvLines[row]; | ||||
|             for (auto col = 0u; col < maxCols; col++) | ||||
|             { | ||||
|                 auto& cell = stringTable->values[row * maxCols + col]; | ||||
|                 if (col >= rowValues.size() || rowValues[col].empty()) | ||||
|                     cell.string = ""; | ||||
|                 else | ||||
|                     cell.string = memory->Dup(rowValues[col].c_str()); | ||||
|  | ||||
|                 cell.hash = Common::Com_HashString(cell.string); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         std::sort(&stringTable->cellIndex[0], | ||||
|                   &stringTable->cellIndex[cellCount - 1], | ||||
|                   [stringTable, maxCols](const int16_t a, const int16_t b) | ||||
|                   { | ||||
|                       auto compareResult = stringTable->values[a].hash - stringTable->values[b].hash; | ||||
|                       if (compareResult == 0) | ||||
|                           compareResult = a % maxCols - b % maxCols; | ||||
|                       return compareResult < 0; | ||||
|                   }); | ||||
|     } | ||||
|  | ||||
|     else | ||||
|     { | ||||
|         stringTable->values = nullptr; | ||||
|         stringTable->cellIndex = nullptr; | ||||
|     } | ||||
|     string_table::StringTableLoaderV3<StringTable, Common::Com_HashString> loader; | ||||
|     auto* stringTable = loader.LoadFromStream(assetName, *memory, *file.m_stream); | ||||
|  | ||||
|     manager->AddAsset(ASSET_TYPE_STRINGTABLE, assetName, stringTable); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user