Update assetManager.cpp

load compiled binary if it exists and is newer than the asset file
This commit is contained in:
marauder2k7 2025-10-12 17:51:05 +01:00
parent 48680700ab
commit e1bcced905

View file

@ -2692,133 +2692,148 @@ bool AssetManager::scanDeclaredAssets( const char* pPath, const char* pExtension
TamlAssetDeclaredVisitor assetDeclaredVisitor; TamlAssetDeclaredVisitor assetDeclaredVisitor;
// Iterate files. // Iterate files.
for (S32 i = 0; i < numAssets; ++i) for (S32 i = 0; i < numAssets; ++i)
{ {
Torque::Path assetPath = files[i]; Torque::Path assetPath = files[i];
// Clear declared assets. Torque::Path compiledPath = assetPath;
assetDeclaredVisitor.clear(); compiledPath.setExtension(mTaml.getAutoFormatBinaryExtension());
// Format full file-path. if (Torque::FS::IsFile(compiledPath))
char assetFileBuffer[1024]; {
dSprintf( assetFileBuffer, sizeof(assetFileBuffer), "%s/%s", assetPath.getPath().c_str(), assetPath.getFullFileName().c_str()); Torque::FS::FileNodeRef assetFile = Torque::FS::GetFileNode(assetPath);
Torque::FS::FileNodeRef compiledFile = Torque::FS::GetFileNode(compiledPath);
// Parse the filename. if (assetFile != NULL && compiledFile != NULL)
if ( !mTaml.parse( assetFileBuffer, assetDeclaredVisitor ) ) {
{ if (compiledFile->getModifiedTime() >= assetFile->getModifiedTime())
// Warn. assetPath = compiledPath;
Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.", assetFileBuffer ); }
continue; }
}
// Fetch asset definition. // Clear declared assets.
AssetDefinition& foundAssetDefinition = assetDeclaredVisitor.getAssetDefinition(); assetDeclaredVisitor.clear();
// Did we get an asset name? // Format full file-path.
if ( foundAssetDefinition.mAssetName == StringTable->EmptyString() ) char assetFileBuffer[1024];
{ dSprintf( assetFileBuffer, sizeof(assetFileBuffer), "%s/%s", assetPath.getPath().c_str(), assetPath.getFullFileName().c_str());
// No, so warn.
Con::warnf( "Asset Manager: Parsed file '%s' but did not encounter an asset.", assetFileBuffer );
continue;
}
// Set module definition. // Parse the filename.
foundAssetDefinition.mpModuleDefinition = pModuleDefinition; if ( !mTaml.parse( assetFileBuffer, assetDeclaredVisitor ) )
{
// Warn.
Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.", assetFileBuffer );
continue;
}
// Format asset Id. // Fetch asset definition.
char assetIdBuffer[1024]; AssetDefinition& foundAssetDefinition = assetDeclaredVisitor.getAssetDefinition();
dSprintf(assetIdBuffer, sizeof(assetIdBuffer), "%s%s%s",
pModuleDefinition->getModuleId(),
ASSET_SCOPE_TOKEN,
foundAssetDefinition.mAssetName );
// Set asset Id. // Did we get an asset name?
foundAssetDefinition.mAssetId = StringTable->insert( assetIdBuffer ); if ( foundAssetDefinition.mAssetName == StringTable->EmptyString() )
{
// No, so warn.
Con::warnf( "Asset Manager: Parsed file '%s' but did not encounter an asset.", assetFileBuffer );
continue;
}
// Does this asset already exist? // Set module definition.
if ( mDeclaredAssets.contains( foundAssetDefinition.mAssetId ) ) foundAssetDefinition.mpModuleDefinition = pModuleDefinition;
{
// Yes, so warn.
Con::warnf( "Asset Manager: Encountered asset Id '%s' in asset file '%s' but it conflicts with existing asset Id in asset file '%s'.",
foundAssetDefinition.mAssetId,
foundAssetDefinition.mAssetBaseFilePath,
mDeclaredAssets.find( foundAssetDefinition.mAssetId )->value->mAssetBaseFilePath );
continue; // Format asset Id.
} char assetIdBuffer[1024];
dSprintf(assetIdBuffer, sizeof(assetIdBuffer), "%s%s%s",
pModuleDefinition->getModuleId(),
ASSET_SCOPE_TOKEN,
foundAssetDefinition.mAssetName );
// Create new asset definition. // Set asset Id.
AssetDefinition* pAssetDefinition = new AssetDefinition( foundAssetDefinition ); foundAssetDefinition.mAssetId = StringTable->insert( assetIdBuffer );
// Store in declared assets. // Does this asset already exist?
mDeclaredAssets.insert( pAssetDefinition->mAssetId, pAssetDefinition ); if ( mDeclaredAssets.contains( foundAssetDefinition.mAssetId ) )
{
// Yes, so warn.
Con::warnf( "Asset Manager: Encountered asset Id '%s' in asset file '%s' but it conflicts with existing asset Id in asset file '%s'.",
foundAssetDefinition.mAssetId,
foundAssetDefinition.mAssetBaseFilePath,
mDeclaredAssets.find( foundAssetDefinition.mAssetId )->value->mAssetBaseFilePath );
// Store in module assets. continue;
moduleAssets.push_back( pAssetDefinition ); }
// Info. // Create new asset definition.
if ( mEchoInfo ) AssetDefinition* pAssetDefinition = new AssetDefinition( foundAssetDefinition );
{
Con::printSeparator();
Con::printf( "Asset Manager: Adding Asset Id '%s' of type '%s' in asset file '%s'.",
pAssetDefinition->mAssetId,
pAssetDefinition->mAssetType,
pAssetDefinition->mAssetBaseFilePath );
}
// Fetch asset Id. // Store in declared assets.
StringTableEntry assetId = pAssetDefinition->mAssetId; mDeclaredAssets.insert( pAssetDefinition->mAssetId, pAssetDefinition );
// Fetch asset dependencies. // Store in module assets.
TamlAssetDeclaredVisitor::typeAssetIdVector& assetDependencies = assetDeclaredVisitor.getAssetDependencies(); moduleAssets.push_back( pAssetDefinition );
// Are there any asset dependencies? // Info.
if ( assetDependencies.size() > 0 ) if ( mEchoInfo )
{ {
// Yes, so iterate dependencies. Con::printSeparator();
for( TamlAssetDeclaredVisitor::typeAssetIdVector::iterator assetDependencyItr = assetDependencies.begin(); assetDependencyItr != assetDependencies.end(); ++assetDependencyItr ) Con::printf( "Asset Manager: Adding Asset Id '%s' of type '%s' in asset file '%s'.",
{ pAssetDefinition->mAssetId,
// Fetch asset Ids. pAssetDefinition->mAssetType,
StringTableEntry dependencyAssetId = *assetDependencyItr; pAssetDefinition->mAssetBaseFilePath );
}
// Insert depends-on. // Fetch asset Id.
mAssetDependsOn.insertEqual( assetId, dependencyAssetId ); StringTableEntry assetId = pAssetDefinition->mAssetId;
// Insert is-depended-on. // Fetch asset dependencies.
mAssetIsDependedOn.insertEqual( dependencyAssetId, assetId ); TamlAssetDeclaredVisitor::typeAssetIdVector& assetDependencies = assetDeclaredVisitor.getAssetDependencies();
// Info. // Are there any asset dependencies?
if ( mEchoInfo ) if ( assetDependencies.size() > 0 )
{ {
Con::printf( "Asset Manager: Asset Id '%s' has dependency of Asset Id '%s'", assetId, dependencyAssetId ); // Yes, so iterate dependencies.
} for( TamlAssetDeclaredVisitor::typeAssetIdVector::iterator assetDependencyItr = assetDependencies.begin(); assetDependencyItr != assetDependencies.end(); ++assetDependencyItr )
} {
} // Fetch asset Ids.
StringTableEntry dependencyAssetId = *assetDependencyItr;
// Fetch asset loose files. // Insert depends-on.
TamlAssetDeclaredVisitor::typeLooseFileVector& assetLooseFiles = assetDeclaredVisitor.getAssetLooseFiles(); mAssetDependsOn.insertEqual( assetId, dependencyAssetId );
// Are there any loose files? // Insert is-depended-on.
if ( assetLooseFiles.size() > 0 ) mAssetIsDependedOn.insertEqual( dependencyAssetId, assetId );
{
// Yes, so iterate loose files.
for( TamlAssetDeclaredVisitor::typeLooseFileVector::iterator assetLooseFileItr = assetLooseFiles.begin(); assetLooseFileItr != assetLooseFiles.end(); ++assetLooseFileItr )
{
// Fetch loose file.
StringTableEntry looseFile = *assetLooseFileItr;
// Info. // Info.
if ( mEchoInfo ) if ( mEchoInfo )
{ {
Con::printf( "Asset Manager: Asset Id '%s' has loose file '%s'.", assetId, looseFile ); Con::printf( "Asset Manager: Asset Id '%s' has dependency of Asset Id '%s'", assetId, dependencyAssetId );
} }
}
}
// Store loose file. // Fetch asset loose files.
pAssetDefinition->mAssetLooseFiles.push_back( looseFile ); TamlAssetDeclaredVisitor::typeLooseFileVector& assetLooseFiles = assetDeclaredVisitor.getAssetLooseFiles();
}
} // Are there any loose files?
} if ( assetLooseFiles.size() > 0 )
{
// Yes, so iterate loose files.
for( TamlAssetDeclaredVisitor::typeLooseFileVector::iterator assetLooseFileItr = assetLooseFiles.begin(); assetLooseFileItr != assetLooseFiles.end(); ++assetLooseFileItr )
{
// Fetch loose file.
StringTableEntry looseFile = *assetLooseFileItr;
// Info.
if ( mEchoInfo )
{
Con::printf( "Asset Manager: Asset Id '%s' has loose file '%s'.", assetId, looseFile );
}
// Store loose file.
pAssetDefinition->mAssetLooseFiles.push_back( looseFile );
}
}
}
// Info. // Info.
if ( mEchoInfo ) if ( mEchoInfo )