< Summary

Class:DCL.Backpack.AvatarSlotsView
Assembly:BackpackEditorHUDV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/AvatarSlot/AvatarSlotsView.cs
Covered lines:6
Uncovered lines:60
Coverable lines:66
Total lines:150
Line coverage:9% (6 of 66)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:13
Method coverage:15.3% (2 of 13)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AvatarSlotsView()0%110100%
Awake()0%330100%
CreateAvatarSlotSection(...)0%6200%
RebuildLayout()0%2100%
AddSlotToSection(...)0%2100%
DisablePreviousSlot(...)0%2100%
SetSlotContent(...)0%2100%
ResetCategorySlot(...)0%20400%
RecalculateHideList(...)0%1821300%
SetHideUnhideStatus(...)0%12300%
Select(...)0%6200%
UnSelectAll(...)0%6200%
RefreshControl()0%2100%

File(s)

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

#LineLine coverage
 1using DCL.Helpers;
 2using System;
 3using System.Collections.Generic;
 4using UnityEngine;
 5
 6namespace DCL.Backpack
 7{
 8    public class AvatarSlotsView : BaseComponentView, IAvatarSlotsView
 9    {
 10        [SerializeField] private RectTransform avatarSlotsContainer;
 11
 12        [Header("Prefab references")]
 13        [SerializeField] private GameObject avatarSlotSectionPrefab;
 14        [SerializeField] private GameObject avatarSlotPrefab;
 15        [SerializeField] private GameObject sectionSeparator;
 16
 3717        private readonly Dictionary<string, Transform> avatarSlotSections = new ();
 3718        private readonly Dictionary<string, IAvatarSlotComponentView> avatarSlots = new ();
 19
 20        public event IAvatarSlotsView.ToggleAvatarSlotDelegate OnToggleAvatarSlot;
 21        public event Action<string> OnUnequipFromSlot;
 22        public event Action<string, bool> OnHideUnhidePressed;
 23
 24        private Dictionary<string, HashSet<string>> previouslyHidden;
 25
 26        public override void Awake()
 27        {
 3528            previouslyHidden = new Dictionary<string, HashSet<string>>();
 29
 133030            foreach (string category in WearableItem.CATEGORIES_PRIORITY)
 63031                previouslyHidden.Add(category, new HashSet<string>());
 3532        }
 33
 34        public void CreateAvatarSlotSection(string sectionName, bool addSeparator)
 35        {
 036            avatarSlotSections.Add(sectionName, Instantiate(avatarSlotSectionPrefab, avatarSlotsContainer).transform);
 37
 038            if (addSeparator)
 039                Instantiate(sectionSeparator, avatarSlotsContainer);
 040        }
 41
 42        public void RebuildLayout()
 43        {
 44            // Needed because adding elements to a transform that contains a
 45            // layout does not refresh the child placements
 046            Utils.ForceRebuildLayoutImmediate(avatarSlotsContainer);
 047        }
 48
 49        public void AddSlotToSection(string sectionName, string slotCategory, bool allowUnEquip)
 50        {
 051            IAvatarSlotComponentView avatarSlot = Instantiate(avatarSlotPrefab, avatarSlotSections[sectionName]).GetComp
 052            avatarSlot.SetCategory(slotCategory);
 053            avatarSlot.SetUnEquipAllowed(allowUnEquip);
 054            avatarSlots.Add(slotCategory, avatarSlot);
 055            avatarSlot.OnSelectAvatarSlot += (slotModel, isToggled) => OnToggleAvatarSlot?.Invoke(slotModel.category, sl
 056            avatarSlot.OnUnEquip += (wearableId) => OnUnequipFromSlot?.Invoke(wearableId);
 057            avatarSlot.OnFocusHiddenBy += (hiddenBy) => avatarSlots[hiddenBy].ShakeAnimation();
 058            avatarSlot.OnHideUnhidePressed += (category, isOverridden) => OnHideUnhidePressed?.Invoke(category, isOverri
 059        }
 60
 61        public void DisablePreviousSlot(string category) =>
 062            avatarSlots[category].OnPointerClickOnDifferentSlot();
 63
 64        public void SetSlotContent(string category, WearableItem wearableItem, string bodyShape, HashSet<string> forceRe
 65        {
 066            avatarSlots[category].SetRarity(wearableItem.rarity);
 067            avatarSlots[category].SetNftImage(wearableItem.ComposeThumbnailUrl());
 068            avatarSlots[category].SetWearableId(wearableItem.id);
 069            avatarSlots[category].SetHideList(wearableItem.GetHidesList(bodyShape));
 070            RecalculateHideList(forceRender);
 071        }
 72
 73        public void ResetCategorySlot(string category, HashSet<string> forceRender)
 74        {
 075            if (avatarSlots[category].GetHideList() != null)
 076                foreach (var slot in avatarSlots[category].GetHideList())
 077                    if (avatarSlots.ContainsKey(slot))
 078                        avatarSlots[slot].SetIsHidden(false, category);
 79
 080            avatarSlots[category].ResetSlot();
 081            RecalculateHideList(forceRender);
 082        }
 83
 84        public void RecalculateHideList(HashSet<string> forceRender)
 85        {
 086            foreach (var avatarSlotComponentView in avatarSlots)
 87            {
 088                bool isHidden = forceRender.Contains(avatarSlotComponentView.Key);
 089                avatarSlotComponentView.Value.SetForceRender(isHidden);
 90            }
 91
 092            foreach (string category in WearableItem.CATEGORIES_PRIORITY)
 093                previouslyHidden[category] = new HashSet<string>();
 94
 095            foreach (string priorityCategory in WearableItem.CATEGORIES_PRIORITY)
 96            {
 097                if (!avatarSlots.ContainsKey(priorityCategory) || avatarSlots[priorityCategory].GetHideList() == null)
 98                    continue;
 99
 0100                foreach (string categoryToHide in avatarSlots[priorityCategory].GetHideList())
 101                {
 102                    //if it hides a slot that doesn't exist, avoid processing hides
 0103                    if (!avatarSlots.ContainsKey(categoryToHide))
 104                        continue;
 105
 106                    //if category has already been processed, avoid processing hides
 0107                    if (previouslyHidden[categoryToHide].Contains(priorityCategory))
 108                    {
 0109                        avatarSlots[categoryToHide].SetIsHidden(false, priorityCategory);
 0110                        continue;
 111                    }
 112
 0113                    previouslyHidden[priorityCategory].Add(categoryToHide);
 114
 0115                    if (forceRender != null && forceRender.Contains(categoryToHide))
 116                    {
 0117                        avatarSlots[categoryToHide].SetIsHidden(false, priorityCategory);
 0118                        avatarSlots[categoryToHide].SetHideIconVisible(true);
 0119                        continue;
 120                    }
 121
 0122                    avatarSlots[categoryToHide].SetIsHidden(true, priorityCategory);
 123                }
 124            }
 0125        }
 126
 127        public void SetHideUnhideStatus(string slotCategory, bool isOverridden)
 128        {
 0129            if (slotCategory == null)
 0130                return;
 131
 0132            if (avatarSlots.TryGetValue(slotCategory, out var slot))
 0133                slot.SetForceRender(isOverridden);
 0134        }
 135
 136        public void Select(string category, bool notify)
 137        {
 0138            if (avatarSlots.TryGetValue(category, out var slot))
 0139                slot.Select(notify);
 0140        }
 141
 142        public void UnSelectAll(bool notify)
 143        {
 0144            foreach (KeyValuePair<string,IAvatarSlotComponentView> slot in avatarSlots)
 0145                slot.Value.UnSelect(notify);
 0146        }
 147
 0148        public override void RefreshControl() { }
 149    }
 150}