< Summary

Class:DCL.Backpack.AvatarSlotsHUDController
Assembly:BackpackEditorHUDV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/AvatarSlot/AvatarSlotsHUDController.cs
Covered lines:41
Uncovered lines:2
Coverable lines:43
Total lines:108
Line coverage:95.3% (41 of 43)
Covered branches:0
Total branches:0
Covered methods:10
Total methods:11
Method coverage:90.9% (10 of 11)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AvatarSlotsHUDController(...)0%110100%
GenerateSlots()0%550100%
Dispose()0%110100%
SelectSlot(...)0%110100%
UnselectAllSlots(...)0%2100%
Recalculate(...)0%110100%
Equip(...)0%110100%
UnEquip(...)0%110100%
ClearSlotSelection()0%220100%
CanAvatarSlotBeUnEquipped(...)0%330100%
ToggleSlot(...)0%660100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/AvatarSlot/AvatarSlotsHUDController.cs

#LineLine coverage
 1using MainScripts.DCL.Controllers.HUD.CharacterPreview;
 2using System;
 3using System.Collections.Generic;
 4using UnityEngine;
 5
 6namespace DCL.Backpack
 7{
 8    public class AvatarSlotsHUDController
 9    {
 10        internal const string HANDS_FEATURE = "hands";
 11        public event Action<string, bool, PreviewCameraFocus, bool> OnToggleSlot;
 12
 13        private readonly IAvatarSlotsView avatarSlotsView;
 14        private string lastSelectedSlot;
 15        internal AvatarSlotsDefinitionSO avatarSlotsDefinition;
 16        private readonly FeatureFlag featureFlag;
 17
 18        public event Action<string, UnequipWearableSource> OnUnequipFromSlot;
 19        public event Action<string, bool> OnHideUnhidePressed;
 20
 7121        public AvatarSlotsHUDController(IAvatarSlotsView avatarSlotsView,
 22            IBackpackAnalyticsService backpackAnalyticsService,
 23            IBaseVariable<FeatureFlag> featureFlag)
 24        {
 7125            this.featureFlag = featureFlag.Get();
 7126            this.avatarSlotsView = avatarSlotsView;
 7127            avatarSlotsView.OnToggleAvatarSlot += ToggleSlot;
 7128            avatarSlotsView.OnUnequipFromSlot += (wearableId) => OnUnequipFromSlot?.Invoke(wearableId, UnequipWearableSo
 7129            avatarSlotsView.OnHideUnhidePressed += (category, forceRender) =>
 30            {
 231                if (forceRender)
 132                    backpackAnalyticsService.SendForceShowWearable(category);
 33                else
 134                    backpackAnalyticsService.SendForceHideWearable(category);
 35
 236                OnHideUnhidePressed?.Invoke(category, forceRender);
 037            };
 7138            avatarSlotsDefinition = Resources.Load<AvatarSlotsDefinitionSO>("AvatarSlotsDefinition");
 7139        }
 40
 41        public void GenerateSlots()
 42        {
 2843            bool showHands = featureFlag.IsFeatureEnabled(HANDS_FEATURE);
 21844            for (var i = 0; i < avatarSlotsDefinition.slotsDefinition.Length; i++)
 45            {
 8146                SerializableKeyValuePair<string, List<string>> section = avatarSlotsDefinition.slotsDefinition[i];
 8147                avatarSlotsView.CreateAvatarSlotSection(section.key, i < avatarSlotsDefinition.slotsDefinition.Length - 
 48
 109649                foreach (string avatarSlotSection in section.value)
 50                {
 46751                    if (avatarSlotSection == WearableLiterals.Categories.HANDS_WEAR)
 52                    {
 2753                        if (showHands)
 154                            avatarSlotsView.AddSlotToSection(section.key, avatarSlotSection, CanAvatarSlotBeUnEquipped(a
 55                    }
 56                    else
 44057                        avatarSlotsView.AddSlotToSection(section.key, avatarSlotSection, CanAvatarSlotBeUnEquipped(avata
 58                }
 59            }
 2860            avatarSlotsView.RebuildLayout();
 2861        }
 62
 63        public void Dispose() =>
 9464            avatarSlotsView.OnToggleAvatarSlot -= ToggleSlot;
 65
 66        public void SelectSlot(string category, bool notify = true)
 67        {
 1168            ClearSlotSelection();
 69
 1170            lastSelectedSlot = category;
 1171            avatarSlotsView.Select(category, notify);
 1172        }
 73
 74        public void UnselectAllSlots(bool notify = true) =>
 075            avatarSlotsView.UnSelectAll(notify);
 76
 77        public void Recalculate(HashSet<string> forceRender) =>
 778            avatarSlotsView.RecalculateHideList(forceRender);
 79
 80        public void Equip(WearableItem wearableItem, string bodyShape, HashSet<string> forceRender) =>
 2781            avatarSlotsView.SetSlotContent(wearableItem.data.category, wearableItem, bodyShape, forceRender);
 82
 83        public void UnEquip(string category, HashSet<string> forceRender) =>
 784            avatarSlotsView.ResetCategorySlot(category, forceRender);
 85
 86        public void ClearSlotSelection()
 87        {
 9888            if (string.IsNullOrEmpty(lastSelectedSlot)) return;
 489            avatarSlotsView.DisablePreviousSlot(lastSelectedSlot);
 490            lastSelectedSlot = "";
 491        }
 92
 93        private bool CanAvatarSlotBeUnEquipped(string avatarSlotSection) =>
 44194            avatarSlotSection != WearableLiterals.Categories.BODY_SHAPE &&
 95            avatarSlotSection != WearableLiterals.Categories.EYES &&
 96            avatarSlotSection != WearableLiterals.Categories.MOUTH;
 97
 98        private void ToggleSlot(string slotCategory, bool supportColor, PreviewCameraFocus previewCameraFocus, bool isSe
 99        {
 7100            if (isSelected && !string.IsNullOrEmpty(lastSelectedSlot))
 1101                avatarSlotsView.DisablePreviousSlot(lastSelectedSlot);
 102
 7103            lastSelectedSlot = isSelected ? slotCategory : "";
 104
 7105            OnToggleSlot?.Invoke(slotCategory, supportColor, previewCameraFocus, isSelected);
 5106        }
 107    }
 108}