< Summary

Class:AvatarUtils
Assembly:AvatarShape
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Avatar/AvatarUtils.cs
Covered lines:29
Uncovered lines:0
Coverable lines:29
Total lines:80
Line coverage:100% (29 of 29)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AvatarUtils()0%110100%
MapSharedMaterialsRecursively(...)0%660100%
SetColorInHierarchy(...)0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Avatar/AvatarUtils.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL;
 4using DCL.Helpers;
 5using UnityEngine;
 6
 7public static class AvatarUtils
 8{
 19    public static int _BaseColor = Shader.PropertyToID("_BaseColor");
 110    public static int _EmissionColor = Shader.PropertyToID("_EmissionColor");
 111    public static int _BaseMap = Shader.PropertyToID("_BaseMap");
 112    public static int _EyesTexture = Shader.PropertyToID("_EyesTexture");
 113    public static int _EyeTint = Shader.PropertyToID("_EyeTint");
 114    public static int _IrisMask = Shader.PropertyToID("_IrisMask");
 115    public static int _TintMask = Shader.PropertyToID("_TintMask");
 16
 17    /// <summary>
 18    /// This will search all the transform hierachy for sharedMaterials filtered by name, and call a map function on the
 19    /// This means each material will be replaced with the function return value.
 20    /// </summary>
 21    public static void MapSharedMaterialsRecursively(Transform transformRoot,
 22        Func<Material, Material> mapFunction,
 23        string materialsContainingThisName = null)
 24    {
 1825        Renderer[] renderers = transformRoot.GetComponentsInChildren<Renderer>(true);
 26
 10827        for (int i = 0; i < renderers.Length; i++)
 28        {
 3629            Renderer r = renderers[i];
 3630            Material[] sharedMats = r.sharedMaterials;
 31
 14432            for (int i1 = 0; i1 < sharedMats.Length; i1++)
 33            {
 3634                Material m = sharedMats[i1];
 35
 3636                if (m == null)
 37                    continue;
 38
 3639                bool materialNameIsCorrect = true;
 40
 3641                if ( !string.IsNullOrEmpty(materialsContainingThisName) )
 42                {
 3643                    string materialName = m.name.ToLower();
 3644                    materialNameIsCorrect = materialName.Contains(materialsContainingThisName.ToLower());
 45                }
 46
 3647                if (!materialNameIsCorrect)
 48                    continue;
 49
 450                string newMatName = sharedMats[i1].name;
 451                Material newMat = mapFunction.Invoke(sharedMats[i1]);
 452                newMat.name = newMatName;
 453                sharedMats[i1] = newMat;
 54            }
 55
 3656            r.sharedMaterials = sharedMats;
 57        }
 1858    }
 59
 60    /// <summary>
 61    /// This will search all the transform hierachy, and change _Color on all materials containing the proper name.
 62    /// </summary>
 63    /// <param name="transformRoot">Transform where to start</param>
 64    /// <param name="materialsContainingThisName">name to filter in materials</param>
 65    /// <param name="colorToChange">color to change in the renderers</param>
 66    public static void SetColorInHierarchy(Transform transformRoot,
 67        string materialsContainingThisName,
 68        Color colorToChange,
 69        int propertyId)
 70    {
 1871        MapSharedMaterialsRecursively(
 72            transformRoot,
 73            (mat) =>
 74            {
 475                mat.SetColor(propertyId, colorToChange);
 476                return mat;
 77            },
 78            materialsContainingThisName);
 1879    }
 80}