//----------------------------------------------------------------------------- // Returns true if the material or any of its dependents use an $envmap //----------------------------------------------------------------------------- bool DoesMaterialOrDependentsUseEnvmap( const char *pPatchedMaterialName ) { const char *pOriginalMaterialName = GetOriginalMaterialNameForPatchedMaterial( pPatchedMaterialName ); if( DoesMaterialHaveKey( pOriginalMaterialName, "$envmap" ) ) return true; const char *pDependentMaterial = FindDependentMaterial( pOriginalMaterialName ); if ( !pDependentMaterial ) return false; return DoesMaterialOrDependentsUseEnvmap( pDependentMaterial ); }
//----------------------------------------------------------------------------- // Scan material + all subsections for key //----------------------------------------------------------------------------- static bool DoesMaterialHaveKey( KeyValues *pKeyValues, const char *pKeyName ) { if ( pKeyValues->GetString( pKeyName, NULL ) != NULL ) return true; for( KeyValues *pSubKey = pKeyValues->GetFirstTrueSubKey(); pSubKey; pSubKey = pSubKey->GetNextTrueSubKey() ) { if ( DoesMaterialHaveKey( pSubKey, pKeyName ) ) return true; } return false; }
//----------------------------------------------------------------------------- // Scan material + all subsections for key //----------------------------------------------------------------------------- bool DoesMaterialHaveKey( const char *pMaterialName, const char *pKeyName ) { char name[512]; Q_snprintf( name, 512, "materials/%s.vmt", GetOriginalMaterialNameForPatchedMaterial( pMaterialName ) ); KeyValues *kv = new KeyValues( "blah" ); if ( !kv->LoadFromFile( g_pFileSystem, name ) ) { kv->deleteThis(); return NULL; } bool retVal = DoesMaterialHaveKey( kv, pKeyName ); kv->deleteThis(); return retVal; }