2025-02-19 17:24:26 +09:00
using TriLibCore.Mappers ;
using TriLibCore.Utils ;
using UnityEditor ;
using UnityEngine ;
namespace TriLibCore.Editor
{
2025-06-11 16:50:56 +09:00
/// <summary>
/// Represents a series of Material Mapper utility methods.
/// </summary>
[InitializeOnLoad]
2025-02-19 17:24:26 +09:00
public static class CheckMappers
{
2025-06-11 16:50:56 +09:00
[MenuItem("Tools/TriLib/Select Material Mappers based on Rendering Pipeline")]
private static void AutoSelect ( )
2025-02-19 17:24:26 +09:00
{
2025-06-11 16:50:56 +09:00
string materialMapperName ;
2025-02-19 17:24:26 +09:00
for ( var i = 0 ; i < MaterialMapper . RegisteredMappers . Count ; i + + )
{
2025-06-11 16:50:56 +09:00
materialMapperName = MaterialMapper . RegisteredMappers [ i ] ;
TriLibSettings . SetBool ( materialMapperName , false ) ;
2025-02-19 17:24:26 +09:00
}
2025-06-11 16:50:56 +09:00
materialMapperName = AssetLoader . GetCompatibleMaterialMapperName ( ) ;
SelectMapper ( materialMapperName ) ;
}
2025-02-19 17:24:26 +09:00
2025-06-11 16:50:56 +09:00
/// <summary>
/// Enables a compatible Material Mapper if none is found.
/// </summary>
public static void EnableCompatibleMaterialMapperIfNeeded ( )
{
string materialMapperName ;
for ( var i = 0 ; i < MaterialMapper . RegisteredMappers . Count ; i + + )
2025-02-19 17:24:26 +09:00
{
2025-06-11 16:50:56 +09:00
materialMapperName = MaterialMapper . RegisteredMappers [ i ] ;
if ( TriLibSettings . GetBool ( materialMapperName , false ) )
2025-02-19 17:24:26 +09:00
{
2025-06-11 16:50:56 +09:00
return ;
2025-02-19 17:24:26 +09:00
}
}
2025-06-11 16:50:56 +09:00
EnableCompatibleMaterialMapper ( ) ;
2025-02-19 17:24:26 +09:00
}
2025-06-11 16:50:56 +09:00
/// <summary>
/// Tries to find the best Material Mapper depending on the Rendering Pipeline.
/// </summary>
public static void EnableCompatibleMaterialMapper ( )
2025-02-19 17:24:26 +09:00
{
2025-06-11 16:50:56 +09:00
var usingMaterialMapper = false ;
2025-02-19 17:24:26 +09:00
for ( var i = 0 ; i < MaterialMapper . RegisteredMappers . Count ; i + + )
{
var materialMapperName = MaterialMapper . RegisteredMappers [ i ] ;
2025-06-11 16:50:56 +09:00
if ( TriLibSettings . GetBool ( materialMapperName ) )
{
usingMaterialMapper = true ;
break ;
}
2025-02-19 17:24:26 +09:00
}
2025-06-11 16:50:56 +09:00
if ( ! usingMaterialMapper )
2025-02-19 17:24:26 +09:00
{
2025-06-11 16:50:56 +09:00
var materialMapperName = AssetLoader . GetCompatibleMaterialMapperName ( ) ;
SelectMapper ( materialMapperName ) ;
2025-02-19 17:24:26 +09:00
}
2025-06-11 16:50:56 +09:00
}
static CheckMappers ( )
{
EnableCompatibleMaterialMapperIfNeeded ( ) ;
2025-02-19 17:24:26 +09:00
}
public static void SelectMapper ( string materialMapper )
{
2025-06-11 16:50:56 +09:00
Debug . Log ( $"TriLib is configured to use the '{materialMapper}' Material Mapper. If you want to use different Material Mappers, you can change this setting on the 'Edit->Project Settings->TriLib' menu." ) ;
2025-02-19 17:24:26 +09:00
TriLibSettings . SetBool ( materialMapper , true ) ;
}
}
}