MCPcopy Create free account
hub / github.com/Illation/ETEngine / CookFilePackages

Function CookFilePackages

Engine/source/EtCooker/mainCooker.cpp:220–272  ·  view source on GitHub ↗

--------------------- CookCompiledPackage Writes the package with compiled data that ends up as a generated source file. - this includes the file for the asset database

Source from the content-addressed store, hash-verified

218// - this includes the file for the asset database
219//
220void 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

Callers 1

RunCookerFunction · 0.85

Calls 8

AddPackageToWriterFunction · 0.85
SafeDeleteFunction · 0.85
GetPathMethod · 0.80
GetNameMethod · 0.80
SetFlagsMethod · 0.80
GetIdMethod · 0.45
WriteMethod · 0.45
OpenMethod · 0.45

Tested by

no test coverage detected