--------------------- CookCompiledPackage Writes the package with compiled data that ends up as a generated source file. - this includes the file for the asset database
| 218 | // - this includes the file for the asset database |
| 219 | // |
| 220 | void CookFilePackages(std::string const& dbBase, |
| 221 | std::string const& outPath, |
| 222 | core::AssetDatabase& db, |
| 223 | std::string const& engineDbBase, |
| 224 | core::AssetDatabase& engineDb) |
| 225 | { |
| 226 | // Get a unified list of package descriptors |
| 227 | std::vector<core::AssetDatabase::PackageDescriptor> descriptors = db.packages; |
| 228 | for (core::AssetDatabase::PackageDescriptor const& desc : engineDb.packages) |
| 229 | { |
| 230 | // check if there is already a package with the same ID tracked in "descriptors" |
| 231 | if (std::find_if(descriptors.cbegin(), descriptors.cend(), [&desc](core::AssetDatabase::PackageDescriptor const& tracked) |
| 232 | { |
| 233 | return tracked.GetId() == desc.GetId(); |
| 234 | }) == descriptors.cend()) |
| 235 | { |
| 236 | descriptors.emplace_back(desc); |
| 237 | } |
| 238 | } |
| 239 | |
| 240 | // each package can have a separate asset list |
| 241 | for (core::AssetDatabase::PackageDescriptor const& desc : descriptors) |
| 242 | { |
| 243 | PackageWriter packageWriter; |
| 244 | std::vector<uint8> packageData; |
| 245 | |
| 246 | AddPackageToWriter(desc.GetId(), dbBase, packageWriter, db); |
| 247 | AddPackageToWriter(desc.GetId(), engineDbBase, packageWriter, engineDb); |
| 248 | |
| 249 | // write our package |
| 250 | packageWriter.Write(packageData); |
| 251 | |
| 252 | // Ensure the generated file directory exists |
| 253 | core::Directory* dir = new core::Directory(outPath + desc.GetPath(), nullptr, true); |
| 254 | |
| 255 | // Create the output package file |
| 256 | core::File* outFile = new core::File(desc.GetName() + core::FilePackage::s_PackageFileExtension, dir); |
| 257 | core::FILE_ACCESS_FLAGS outFlags; |
| 258 | outFlags.SetFlags(core::FILE_ACCESS_FLAGS::FLAGS::Create | core::FILE_ACCESS_FLAGS::FLAGS::Exists); |
| 259 | if (!outFile->Open(core::FILE_ACCESS_MODE::Write, outFlags)) |
| 260 | { |
| 261 | LOG("CookFilePackages > Failed to open file " + outFile->GetName(), core::LogLevel::Warning); |
| 262 | continue; |
| 263 | } |
| 264 | |
| 265 | // Write the package data |
| 266 | outFile->Write(packageData); |
| 267 | |
| 268 | // cleanup |
| 269 | SafeDelete(outFile); |
| 270 | SafeDelete(dir); |
| 271 | } |
| 272 | } |
| 273 | |
| 274 | |
| 275 | } // namespace cooker |
no test coverage detected