< 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:9
Uncovered lines:94
Coverable lines:103
Total lines:249
Line coverage:8.7% (9 of 103)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Start()0%220100%
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%1101000%
OnSetAvatarEditorVisibility(...)0%42600%
OnDestroy()0%110100%

File(s)

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

#LineLine coverage
 1using DCL;
 2using System.Collections;
 3using UnityEngine;
 4using UnityEngine.UI;
 5using Categories = WearableLiterals.Categories;
 6using Rarity = WearableLiterals.ItemRarity;
 7
 8public class AvatarEditorHUDAudioHandler : MonoBehaviour
 9{
 10    [SerializeField]
 11    AvatarEditorHUDView view;
 12
 13    [SerializeField]
 14    ItemSelector nftItemSelector;
 15
 16    [SerializeField]
 17    Button randomizeButton;
 18
 19    [SerializeField]
 20    AudioEvent eventMusic, eventRarity, eventAvatarAppear, eventReactionMale, eventReactionFemale, eventWearableClothing
 21               eventWearableFootwear, eventWearableHair, eventWearableHatMask, eventWearableRarity;
 22
 23    WearableItem lastSelectedWearable = null;
 24    bool hasClickedRandomize = false, wearableIsSameAsPrevious = false;
 25
 26    IEnumerator musicFadeOut;
 27
 28    private void Start()
 29    {
 4830        int nPairs = view.wearableGridPairs.Length;
 172831        for (int i = 0; i < nPairs; i++)
 32        {
 81633            view.wearableGridPairs[i].selector.OnItemClicked += OnSelectWearable;
 34        }
 35
 4836        nftItemSelector.OnItemClicked += OnSelectWearable;
 37
 4838        view.OnSetVisibility += OnSetAvatarEditorVisibility;
 4839        view.OnRandomize += OnClickRandomize;
 4840    }
 41
 42    void OnSelectWearable(string wearableId)
 43    {
 044        CatalogController.wearableCatalog.TryGetValue(wearableId, out var wearable);
 045        wearableIsSameAsPrevious = (wearable == lastSelectedWearable);
 046        if (wearableIsSameAsPrevious)
 047            return;
 48
 049        lastSelectedWearable = wearable;
 050        if (wearable == null)
 051            return;
 52
 053        switch (wearable.data.category)
 54        {
 55            case Categories.EYEBROWS:
 056                eventWearableHair.Play(true);
 057                break;
 58            case "facial_hair":
 059                eventWearableHair.Play(true);
 060                break;
 61            case Categories.FEET:
 062                eventWearableFootwear.Play(true);
 063                break;
 64            case Categories.HAIR:
 065                eventWearableHair.Play(true);
 066                break;
 67            case Categories.LOWER_BODY:
 068                eventWearableClothing.Play(true);
 069                break;
 70            case Categories.UPPER_BODY:
 071                eventWearableClothing.Play(true);
 072                break;
 73            case "eyewear":
 074                eventWearableEyewear.Play(true);
 075                break;
 76            case "tiara":
 077                eventWearableJewelry.Play(true);
 078                break;
 79            case "earring":
 080                eventWearableJewelry.Play(true);
 081                break;
 82            case "hat":
 083                eventWearableHatMask.Play(true);
 084                break;
 85            case "top_head":
 086                eventWearableFootwear.Play(true);
 087                break;
 88            case "helmet":
 089                eventWearableFootwear.Play(true);
 090                break;
 91            case "mask":
 092                eventWearableHatMask.Play(true);
 93                break;
 94            default:
 95                break;
 96        }
 097    }
 98
 099    void OnEyeColorChanged(Color color) { ResetLastClickedWearable(); }
 100
 0101    void OnSkinColorChanged(Color color) { ResetLastClickedWearable(); }
 102
 0103    void OnHairColorChanged(Color color) { ResetLastClickedWearable(); }
 104
 105    void OnClickRandomize()
 106    {
 0107        hasClickedRandomize = true;
 0108        ResetLastClickedWearable();
 0109    }
 110
 0111    void ResetLastClickedWearable() { lastSelectedWearable = null; }
 112
 113    private void AvatarAppearFeedback(AvatarModel avatarModelToUpdate)
 114    {
 0115        PlayAudio(avatarModelToUpdate);
 0116    }
 117
 118    void PlayAudio(AvatarModel model)
 119    {
 0120        if (!view.isOpen)
 0121            return;
 122
 0123        eventAvatarAppear.Play(true);
 124
 0125        if (!wearableIsSameAsPrevious)
 126        {
 0127            if (lastSelectedWearable != null)
 0128                PlayRarity();
 129
 0130            if (lastSelectedWearable != null || hasClickedRandomize)
 0131                PlayVoiceReaction(model.bodyShape);
 132        }
 133
 0134        hasClickedRandomize = false;
 0135    }
 136
 137    void PlayRarity()
 138    {
 0139        if (lastSelectedWearable.rarity == null)
 0140            return;
 141
 142        /*switch (lastClickedWearable.rarity)
 143         {
 144             case Rarity.RARE:
 145                 eventRarity.SetIndex(0);
 146                 break;
 147             case Rarity.EPIC:
 148                 eventRarity.SetIndex(1);
 149                 break;
 150             case Rarity.LEGENDARY:
 151                 eventRarity.SetIndex(2);
 152                 break;
 153             case Rarity.MYTHIC:
 154                 eventRarity.SetIndex(3);
 155                 break;
 156             case Rarity.UNIQUE:
 157                 eventRarity.SetIndex(4);
 158                 break;
 159             default:
 160                 eventRarity.SetIndex(0);
 161                 break;
 162         }*/
 163
 0164        if (lastSelectedWearable.rarity == Rarity.UNIQUE)
 0165            eventRarity.SetIndex(1);
 166        else
 0167            eventRarity.SetIndex(0);
 168
 0169        eventRarity.Play(true);
 0170    }
 171
 172    void PlayVoiceReaction(string bodyShape)
 173    {
 0174        float chanceToPlay = 0.75f;
 0175        AudioEvent eventReaction = null;
 176
 0177        if (bodyShape.Contains("Female"))
 0178            eventReaction = eventReactionFemale;
 179        else
 0180            eventReaction = eventReactionMale;
 181
 0182        if (lastSelectedWearable != null)
 183        {
 0184            if (lastSelectedWearable.rarity == Rarity.EPIC
 185                || lastSelectedWearable.rarity == Rarity.LEGENDARY
 186                || lastSelectedWearable.rarity == Rarity.MYTHIC
 187                || lastSelectedWearable.rarity == Rarity.UNIQUE)
 188            {
 0189                eventReaction.RandomizeIndex(14, 28);
 0190                chanceToPlay = 1f;
 191            }
 192            else
 193            {
 0194                eventReaction.RandomizeIndex(0, 14);
 195            }
 196        }
 197
 0198        if (eventReaction != null && Random.Range(0f, 1f) <= chanceToPlay)
 199        {
 0200            if (!eventReaction.source.isPlaying)
 201            {
 0202                eventReaction.PlayScheduled(0.6f);
 203            }
 204        }
 0205    }
 206
 207    void OnSetAvatarEditorVisibility(bool visible)
 208    {
 0209        AudioScriptableObjects.listItemAppear.ResetPitch();
 210
 0211        if (visible)
 212        {
 0213            if (DataStore.i.common.isSignUpFlow.Get())
 214            {
 0215                if (musicFadeOut != null)
 216                {
 0217                    StopCoroutine(musicFadeOut);
 0218                    StartCoroutine(eventMusic.FadeIn(1f));
 219                }
 220
 0221                if (!eventMusic.source.isPlaying)
 0222                    eventMusic.Play();
 223            }
 224
 0225            view.eyeColorPickerComponent.OnColorChanged += OnEyeColorChanged;
 0226            view.skinColorSelector.OnColorSelectorChange += OnSkinColorChanged;
 0227            view.hairColorPickerComponent.OnColorChanged += OnHairColorChanged;
 0228            view.OnAvatarAppearFeedback += AvatarAppearFeedback;
 229        }
 230        else
 231        {
 0232            if (DataStore.i.common.isSignUpFlow.Get())
 233            {
 0234                musicFadeOut = eventMusic.FadeOut(2f);
 0235                StartCoroutine(musicFadeOut);
 236            }
 237
 0238            view.eyeColorPickerComponent.OnColorChanged -= OnEyeColorChanged;
 0239            view.skinColorSelector.OnColorSelectorChange -= OnSkinColorChanged;
 0240            view.hairColorPickerComponent.OnColorChanged -= OnHairColorChanged;
 0241            view.OnAvatarAppearFeedback -= AvatarAppearFeedback;
 242        }
 0243    }
 244
 245    private void OnDestroy()
 246    {
 48247        view.OnSetVisibility -= OnSetAvatarEditorVisibility;
 48248    }
 249}