diff options
| author | Henny022p <info@henny022.de> | 2021-11-27 07:14:50 +0100 |
|---|---|---|
| committer | Henny022p <info@henny022.de> | 2021-11-27 07:14:50 +0100 |
| commit | 48aa1d77201689a72959f630d4eb16a2a11dae6d (patch) | |
| tree | aca80f92120da6d462c5b1343b0ffb8784a0d3b4 /tools/src/asset_processor/main.cpp | |
| parent | 3bda4ba3e8191a2ae1567eb1832f831ec525731f (diff) | |
| parent | bb425249204147db4aa2c22ff20b68909478ad26 (diff) | |
Merge branch 'fix-offset-calculation' of github.com:octorock/tmc into refactorTools
Diffstat (limited to 'tools/src/asset_processor/main.cpp')
| -rw-r--r-- | tools/src/asset_processor/main.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/tools/src/asset_processor/main.cpp b/tools/src/asset_processor/main.cpp index c62860a0..c04ab3d1 100644 --- a/tools/src/asset_processor/main.cpp +++ b/tools/src/asset_processor/main.cpp @@ -149,10 +149,16 @@ int main(int argc, char** argv) { currentOffset = asset["offsets"][gVariant]; } } else if (asset.contains("calculateOffsets")) { // Start offset calculation - std::filesystem::path path = gAssetsFolder; - path = path / asset["calculateOffsets"]; - int baseOffset = asset["start"].get<int>() + currentOffset; - offsetCalculator = std::make_unique<OffsetCalculator>(path, baseOffset); + if (gMode == EXTRACT || gMode == BUILD) { + std::filesystem::path path = gAssetsFolder; + path = path / asset["calculateOffsets"]; + int baseOffset = 0; + // During build mode the offsets are calculated directly instead of from a base address. + if (gMode == EXTRACT) { + baseOffset = asset["start"].get<int>() + currentOffset; + } + offsetCalculator = std::make_unique<OffsetCalculator>(path, baseOffset); + } } else if (asset.contains("path")) { // Asset definition if (asset.contains("variants")) { @@ -182,6 +188,10 @@ int main(int argc, char** argv) { } case CONVERT: { std::unique_ptr<BaseAsset> assetHandler = getAssetHandlerByType(path, asset, currentOffset); + if (!std::filesystem::exists(assetHandler->getBuildPath())) { + std::cerr << "Error: Extracted binary file " << assetHandler->getBuildPath() << " does not exist. Run `make` first." << std::endl; + std::exit(1); + } if (shouldConvertAsset(assetHandler)) { if (gVerbose) { std::cout << "Converting " << assetHandler->getAssetPath() << "..." << std::endl; @@ -192,12 +202,28 @@ int main(int argc, char** argv) { } case BUILD: { std::unique_ptr<BaseAsset> assetHandler = getAssetHandlerByType(path, asset, currentOffset); + if (!std::filesystem::exists(assetHandler->getAssetPath())) { + std::cerr << "Error: Extracted asset file " << assetHandler->getAssetPath() << " does not exist. Run `make extractassets` first." << std::endl; + std::exit(1); + } if (shouldBuildAsset(assetHandler)) { if (gVerbose) { std::cout << "Building " << assetHandler->getAssetPath() << "..." << std::endl; } buildAsset(assetHandler); } + if (offsetCalculator != nullptr) { + // New start is the end of the previous asset. + int start = offsetCalculator->getLastEnd(); + // Get the size of the current asset and calculate the end position. + int filesize = static_cast<int>(std::filesystem::file_size(assetHandler->getBuildPath())); + // Align by four bytes. + if (filesize % 4 != 0) { + filesize += 4 - (filesize % 4); + } + offsetCalculator->setLastEnd(start + filesize); + offsetCalculator->addAsset(start, assetHandler->getSymbol()); + } break; } } |
