< Summary

Class:ItemSelector
Assembly:AvatarEditorHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarEditorHUD/Scripts/ItemSelector.cs
Covered lines:61
Uncovered lines:17
Coverable lines:78
Total lines:176
Line coverage:78.2% (61 of 78)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ItemSelector()0%110100%
Awake()0%110100%
OnDestroy()0%110100%
AddItemToggle(...)0%5.055087.5%
RemoveItemToggle(...)0%12300%
RemoveAllItemToggle()0%220100%
SetBodyShape(...)0%2.032080%
ShowCompatibleWithBodyShape()0%220100%
Select(...)0%220100%
SetWearableLoadingSpinner(...)0%220100%
Unselect(...)0%220100%
UnselectAll()0%220100%
ToggleClicked(...)0%6200%
SellClicked(...)0%6200%
GetItemToggleByID(...)0%3.333066.67%
ShowLoading(...)0%110100%
ShowRetryLoading(...)0%110100%
RetryLoading()0%6200%

File(s)

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

#LineLine coverage
 1using System.Collections.Generic;
 2using System.Runtime.CompilerServices;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6[assembly: InternalsVisibleTo("AvatarEditorHUDTests")]
 7
 8public class ItemSelector : MonoBehaviour
 9{
 10    [SerializeField]
 11    internal ItemToggleFactory itemToggleFactory;
 12
 13    [SerializeField]
 14    private RectTransform itemContainer;
 15
 16    [SerializeField]
 17    internal GameObject loadingSpinner;
 18
 19    [SerializeField]
 20    internal GameObject loadingRetry;
 21
 22    [SerializeField]
 23    internal Button loadingRetryButton;
 24
 25    public event System.Action<string> OnItemClicked;
 26    public event System.Action<string> OnSellClicked;
 27    public event System.Action OnRetryClicked;
 28
 149629    internal Dictionary<string, ItemToggle> itemToggles = new Dictionary<string, ItemToggle>();
 30
 31    private string currentBodyShape;
 32
 33    private void Awake()
 34    {
 8835        Application.quitting += () =>
 36        {
 037            OnItemClicked = null;
 038        };
 39
 8840        loadingRetryButton.onClick.AddListener(RetryLoading);
 8841    }
 42
 17643    private void OnDestroy() { loadingRetryButton.onClick.RemoveListener(RetryLoading); }
 44
 45    public void AddItemToggle(WearableItem item, int amount)
 46    {
 358847        if (item == null)
 048            return;
 358849        if (itemToggles.ContainsKey(item.id))
 050            return;
 51
 52        ItemToggle newToggle;
 358853        if (item.IsCollectible())
 54        {
 3255            newToggle = itemToggleFactory.CreateItemToggleFromRarity(item.rarity, itemContainer);
 3256            newToggle.transform.SetAsFirstSibling();
 3257        }
 58        else
 59        {
 355660            newToggle = itemToggleFactory.CreateBaseWearable(itemContainer);
 61        }
 62
 358863        newToggle.Initialize(item, false, amount);
 358864        newToggle.OnClicked += ToggleClicked;
 358865        newToggle.OnSellClicked += SellClicked;
 358866        itemToggles.Add(item.id, newToggle);
 67
 358868        bool active = string.IsNullOrEmpty(currentBodyShape) || item.SupportsBodyShape(currentBodyShape);
 358869        newToggle.gameObject.SetActive(active);
 358870    }
 71
 72    public void RemoveItemToggle(string itemID)
 73    {
 074        if (string.IsNullOrEmpty(itemID))
 075            return;
 76
 077        ItemToggle toggle = GetItemToggleByID(itemID);
 078        if (toggle == null)
 079            return;
 80
 081        itemToggles.Remove(itemID);
 082        Destroy(toggle.gameObject);
 083    }
 84
 85    public void RemoveAllItemToggle()
 86    {
 217687        using (var it = itemToggles.GetEnumerator())
 88        {
 452889            while (it.MoveNext())
 90            {
 235291                Destroy(it.Current.Value.gameObject);
 92            }
 217693        }
 94
 217695        itemToggles.Clear();
 217696    }
 97
 98    public void SetBodyShape(string bodyShape)
 99    {
 800100        if (currentBodyShape == bodyShape)
 0101            return;
 102
 800103        currentBodyShape = bodyShape;
 800104        ShowCompatibleWithBodyShape();
 800105    }
 106
 107    private void ShowCompatibleWithBodyShape()
 108    {
 800109        using (Dictionary<string, ItemToggle>.Enumerator iterator = itemToggles.GetEnumerator())
 110        {
 2100111            while (iterator.MoveNext())
 112            {
 1300113                ItemToggle current = iterator.Current.Value;
 1300114                bool active = current.wearableItem.SupportsBodyShape(currentBodyShape);
 1300115                current.gameObject.SetActive(active);
 116            }
 800117        }
 800118    }
 119
 120    public void Select(string itemID)
 121    {
 1830122        ItemToggle toggle = GetItemToggleByID(itemID);
 1830123        if (toggle != null)
 940124            toggle.selected = true;
 1830125    }
 126
 127    public void SetWearableLoadingSpinner(string wearableID, bool isActive)
 128    {
 2688129        ItemToggle toggle = GetItemToggleByID(wearableID);
 2688130        if (toggle != null)
 1325131            toggle.SetLoadingSpinner(isActive);
 2688132    }
 133
 134    public void Unselect(string itemID)
 135    {
 870136        ItemToggle toggle = GetItemToggleByID(itemID);
 870137        if (toggle != null)
 435138            toggle.selected = false;
 870139    }
 140
 141    public void UnselectAll()
 142    {
 1410143        using (var iterator = itemToggles.GetEnumerator())
 144        {
 3740145            while (iterator.MoveNext())
 146            {
 2330147                iterator.Current.Value.selected = false;
 148            }
 1410149        }
 1410150    }
 151
 0152    private void ToggleClicked(ItemToggle toggle) { OnItemClicked?.Invoke(toggle.wearableItem.id); }
 153
 0154    private void SellClicked(ItemToggle toggle) { OnSellClicked?.Invoke(toggle.wearableItem.id); }
 155
 156    private ItemToggle GetItemToggleByID(string itemID)
 157    {
 5388158        if (string.IsNullOrEmpty(itemID))
 0159            return null;
 5388160        return itemToggles.ContainsKey(itemID) ? itemToggles[itemID] : null;
 161    }
 162
 163    public void ShowLoading(bool isActive)
 164    {
 1165        loadingSpinner.SetActive(isActive);
 1166        loadingSpinner.transform.SetAsLastSibling();
 1167    }
 168
 169    public void ShowRetryLoading(bool isActive)
 170    {
 1171        loadingRetry.SetActive(isActive);
 1172        loadingRetry.transform.SetAsLastSibling();
 1173    }
 174
 0175    private void RetryLoading() { OnRetryClicked?.Invoke(); }
 176}