using TriLibCore.Mappers;
using UnityEngine;
namespace TriLibCore.Samples
{
///
/// Represents a class used to fix TriLib sample models depending on the rendering pipeline.
///
public class FixMaterials : MonoBehaviour
{
private void Start()
{
MaterialMapper materialMapper = null;
for (var i = 0; i < MaterialMapper.RegisteredMappers.Count; i++)
{
var materialMapperName = MaterialMapper.RegisteredMappers[i];
if (TriLibSettings.GetBool(materialMapperName))
{
try
{
materialMapper = ScriptableObject.CreateInstance(materialMapperName) as MaterialMapper;
}
catch
{
materialMapper = null;
}
break;
}
}
if (materialMapper == null)
{
return;
}
var meshRenderers = GetComponentsInChildren();
for (var j = 0; j < meshRenderers.Length; j++)
{
var meshRenderer = meshRenderers[j];
var materials = meshRenderer.materials;
for (var i = 0; i < materials.Length; i++)
{
var color = meshRenderer.sharedMaterials[i].color;
materials[i] = Instantiate(materialMapper.MaterialPreset);
materials[i].color = color;
}
meshRenderer.materials = materials;
}
var skinnedMeshRenderers = GetComponentsInChildren();
for (var j = 0; j < skinnedMeshRenderers.Length; j++)
{
var skinnedMeshRenderer = skinnedMeshRenderers[j];
var materials = skinnedMeshRenderer.materials;
for (var i = 0; i < materials.Length; i++)
{
var color = skinnedMeshRenderer.sharedMaterials[i].color;
materials[i] = Instantiate(materialMapper.MaterialPreset);
materials[i].color = color;
}
skinnedMeshRenderer.materials = materials;
}
Destroy(materialMapper);
}
}
}