< Summary

Class:AvatarEditorHUDAudioHandler
Assembly:AvatarEditorHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarEditorHUD/Scripts/AvatarEditorHUDAudioHandler.cs
Covered lines:0
Uncovered lines:103
Coverable lines:103
Total lines:251
Line coverage:0% (0 of 103)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:13
Method coverage:0% (0 of 13)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Start()0%6200%
OnSelectWearable(...)0%11223300%
OnEyeColorChanged(...)0%2100%
OnSkinColorChanged(...)0%2100%
OnHairColorChanged(...)0%2100%
OnClickRandomize()0%2100%
ResetLastClickedWearable()0%2100%
AvatarAppearFeedback(...)0%2100%
PlayAudio(...)0%42600%
PlayRarity()0%12300%
PlayVoiceReaction(...)0%1321100%
OnSetAvatarEditorVisibility(...)0%42600%
OnDestroy()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarEditorHUD/Scripts/AvatarEditorHUDAudioHandler.cs

#LineLine coverage
 1using DCL;
 2using DCLServices.WearablesCatalogService;
 3using System.Collections;
 4using UnityEngine;
 5using UnityEngine.UI;
 6using Categories = WearableLiterals.Categories;
 7using Rarity = WearableLiterals.ItemRarity;
 8
 9public class AvatarEditorHUDAudioHandler : MonoBehaviour
 10{
 11    [SerializeField]
 12    AvatarEditorHUDView view;
 13
 14    [SerializeField]
 15    ItemSelector nftItemSelector;
 16
 17    [SerializeField]
 18    Button randomizeButton;
 19
 20    [SerializeField]
 21    AudioEvent eventMusic, eventRarity, eventAvatarAppear, eventReactionMale, eventReactionFemale, eventWearableClothing
 22               eventWearableFootwear, eventWearableHair, eventWearableHatMask, eventWearableRarity;
 23
 24    WearableItem lastSelectedWearable = null;
 25    bool hasClickedRandomize = false, wearableIsSameAsPrevious = false;
 26
 27    IEnumerator musicFadeOut;
 28
 29    private void Start()
 30    {
 031        int nPairs = view.wearableGridPairs.Length;
 032        for (int i = 0; i < nPairs; i++)
 33        {
 034            view.wearableGridPairs[i].selector.OnItemClicked += OnSelectWearable;
 35        }
 36
 037        nftItemSelector.OnItemClicked += OnSelectWearable;
 38
 039        view.OnSetVisibility += OnSetAvatarEditorVisibility;
 040        view.OnRandomize += OnClickRandomize;
 041    }
 42
 43    void OnSelectWearable(string wearableId)
 44    {
 045        Environment.i.serviceLocator.Get<IWearablesCatalogService>().WearablesCatalog.TryGetValue(wearableId, out var we
 046        wearableIsSameAsPrevious = (wearable == lastSelectedWearable);
 047        if (wearableIsSameAsPrevious)
 048            return;
 49
 050        lastSelectedWearable = wearable;
 051        if (wearable == null)
 052            return;
 53
 054        switch (wearable.data.category)
 55        {
 56            case Categories.EYEBROWS:
 057                eventWearableHair.Play(true);
 058                break;
 59            case "facial_hair":
 060                eventWearableHair.Play(true);
 061                break;
 62            case Categories.FEET:
 063                eventWearableFootwear.Play(true);
 064                break;
 65            case Categories.HAIR:
 066                eventWearableHair.Play(true);
 067                break;
 68            case Categories.LOWER_BODY:
 069                eventWearableClothing.Play(true);
 070                break;
 71            case Categories.UPPER_BODY:
 072                eventWearableClothing.Play(true);
 073                break;
 74            case "eyewear":
 075                eventWearableEyewear.Play(true);
 076                break;
 77            case "tiara":
 078                eventWearableJewelry.Play(true);
 079                break;
 80            case "earring":
 081                eventWearableJewelry.Play(true);
 082                break;
 83            case "hat":
 084                eventWearableHatMask.Play(true);
 085                break;
 86            case "top_head":
 087                eventWearableFootwear.Play(true);
 088                break;
 89            case "helmet":
 090                eventWearableFootwear.Play(true);
 091                break;
 92            case "mask":
 093                eventWearableHatMask.Play(true);
 94                break;
 95            default:
 96                break;
 97        }
 098    }
 99
 0100    void OnEyeColorChanged(Color color) { ResetLastClickedWearable(); }
 101
 0102    void OnSkinColorChanged(Color color) { ResetLastClickedWearable(); }
 103
 0104    void OnHairColorChanged(Color color) { ResetLastClickedWearable(); }
 105
 106    void OnClickRandomize()
 107    {
 0108        hasClickedRandomize = true;
 0109        ResetLastClickedWearable();
 0110    }
 111
 0112    void ResetLastClickedWearable() { lastSelectedWearable = null; }
 113
 114    private void AvatarAppearFeedback(AvatarModel avatarModelToUpdate)
 115    {
 0116        PlayAudio(avatarModelToUpdate);
 0117    }
 118
 119    void PlayAudio(AvatarModel model)
 120    {
 0121        if (!view.isOpen)
 0122            return;
 123
 0124        eventAvatarAppear.Play(true);
 125
 0126        if (!wearableIsSameAsPrevious)
 127        {
 0128            if (lastSelectedWearable != null)
 0129                PlayRarity();
 130
 0131            if (lastSelectedWearable != null || hasClickedRandomize)
 0132                PlayVoiceReaction(model.bodyShape);
 133        }
 134
 0135        hasClickedRandomize = false;
 0136    }
 137
 138    void PlayRarity()
 139    {
 0140        if (lastSelectedWearable.rarity == null)
 0141            return;
 142
 143        /*switch (lastClickedWearable.rarity)
 144         {
 145             case Rarity.RARE:
 146                 eventRarity.SetIndex(0);
 147                 break;
 148             case Rarity.EPIC:
 149                 eventRarity.SetIndex(1);
 150                 break;
 151             case Rarity.LEGENDARY:
 152                 eventRarity.SetIndex(2);
 153                 break;
 154             case Rarity.MYTHIC:
 155                 eventRarity.SetIndex(3);
 156                 break;
 157             case Rarity.UNIQUE:
 158                 eventRarity.SetIndex(4);
 159                 break;
 160             default:
 161                 eventRarity.SetIndex(0);
 162                 break;
 163         }*/
 164
 0165        if (lastSelectedWearable.rarity == Rarity.UNIQUE)
 0166            eventRarity.SetIndex(1);
 167        else
 0168            eventRarity.SetIndex(0);
 169
 0170        eventRarity.Play(true);
 0171    }
 172
 173    void PlayVoiceReaction(string bodyShape)
 174    {
 0175        float chanceToPlay = 0.75f;
 0176        AudioEvent eventReaction = null;
 177
 0178        if (bodyShape.Contains("Female"))
 0179            eventReaction = eventReactionFemale;
 180        else
 0181            eventReaction = eventReactionMale;
 182
 0183        if (lastSelectedWearable != null)
 184        {
 0185            if (lastSelectedWearable.rarity == Rarity.EPIC
 186                || lastSelectedWearable.rarity == Rarity.LEGENDARY
 187                || lastSelectedWearable.rarity == Rarity.MYTHIC
 188                || lastSelectedWearable.rarity == Rarity.UNIQUE
 189                || lastSelectedWearable.rarity == Rarity.EXOTIC)
 190            {
 0191                eventReaction.RandomizeIndex(14, 28);
 0192                chanceToPlay = 1f;
 193            }
 194            else
 195            {
 0196                eventReaction.RandomizeIndex(0, 14);
 197            }
 198        }
 199
 0200        if (eventReaction != null && Random.Range(0f, 1f) <= chanceToPlay)
 201        {
 0202            if (!eventReaction.source.isPlaying)
 203            {
 0204                eventReaction.PlayScheduled(0.6f);
 205            }
 206        }
 0207    }
 208
 209    void OnSetAvatarEditorVisibility(bool visible)
 210    {
 0211        AudioScriptableObjects.listItemAppear.ResetPitch();
 212
 0213        if (visible)
 214        {
 0215            if (DataStore.i.common.isSignUpFlow.Get())
 216            {
 0217                if (musicFadeOut != null)
 218                {
 0219                    StopCoroutine(musicFadeOut);
 0220                    StartCoroutine(eventMusic.FadeIn(1f));
 221                }
 222
 0223                if (!eventMusic.source.isPlaying)
 0224                    eventMusic.Play();
 225            }
 226
 0227            view.eyeColorPickerComponent.OnColorChanged += OnEyeColorChanged;
 0228            view.skinColorSelector.OnColorSelectorChange += OnSkinColorChanged;
 0229            view.hairColorPickerComponent.OnColorChanged += OnHairColorChanged;
 0230            view.OnAvatarAppearFeedback += AvatarAppearFeedback;
 231        }
 232        else
 233        {
 0234            if (DataStore.i.common.isSignUpFlow.Get())
 235            {
 0236                musicFadeOut = eventMusic.FadeOut(2f);
 0237                StartCoroutine(musicFadeOut);
 238            }
 239
 0240            view.eyeColorPickerComponent.OnColorChanged -= OnEyeColorChanged;
 0241            view.skinColorSelector.OnColorSelectorChange -= OnSkinColorChanged;
 0242            view.hairColorPickerComponent.OnColorChanged -= OnHairColorChanged;
 0243            view.OnAvatarAppearFeedback -= AvatarAppearFeedback;
 244        }
 0245    }
 246
 247    private void OnDestroy()
 248    {
 0249        view.OnSetVisibility -= OnSetAvatarEditorVisibility;
 0250    }
 251}