< 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    {
 389647        if (item == null)
 048            return;
 389649        if (itemToggles.ContainsKey(item.id))
 050            return;
 51
 52        ItemToggle newToggle;
 389653        if (item.IsCollectible())
 54        {
 3255            newToggle = itemToggleFactory.CreateItemToggleFromRarity(item.rarity, itemContainer);
 3256            newToggle.transform.SetAsFirstSibling();
 3257        }
 58        else
 59        {
 386460            newToggle = itemToggleFactory.CreateBaseWearable(itemContainer);
 61        }
 62
 389663        newToggle.Initialize(item, false, amount);
 389664        newToggle.OnClicked += ToggleClicked;
 389665        newToggle.OnSellClicked += SellClicked;
 389666        itemToggles.Add(item.id, newToggle);
 67
 389668        bool active = string.IsNullOrEmpty(currentBodyShape) || item.SupportsBodyShape(currentBodyShape);
 389669        newToggle.gameObject.SetActive(active);
 389670    }
 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    {
 236387        using (var it = itemToggles.GetEnumerator())
 88        {
 502389            while (it.MoveNext())
 90            {
 266091                Destroy(it.Current.Value.gameObject);
 92            }
 236393        }
 94
 236395        itemToggles.Clear();
 236396    }
 97
 98    public void SetBodyShape(string bodyShape)
 99    {
 768100        if (currentBodyShape == bodyShape)
 0101            return;
 102
 768103        currentBodyShape = bodyShape;
 768104        ShowCompatibleWithBodyShape();
 768105    }
 106
 107    private void ShowCompatibleWithBodyShape()
 108    {
 768109        using (Dictionary<string, ItemToggle>.Enumerator iterator = itemToggles.GetEnumerator())
 110        {
 2016111            while (iterator.MoveNext())
 112            {
 1248113                ItemToggle current = iterator.Current.Value;
 1248114                bool active = current.wearableItem.SupportsBodyShape(currentBodyShape);
 1248115                current.gameObject.SetActive(active);
 116            }
 768117        }
 768118    }
 119
 120    public void Select(string itemID)
 121    {
 1928122        ItemToggle toggle = GetItemToggleByID(itemID);
 1928123        if (toggle != null)
 988124            toggle.selected = true;
 1928125    }
 126
 127    public void SetWearableLoadingSpinner(string wearableID, bool isActive)
 128    {
 2754129        ItemToggle toggle = GetItemToggleByID(wearableID);
 2754130        if (toggle != null)
 1359131            toggle.SetLoadingSpinner(isActive);
 2754132    }
 133
 134    public void Unselect(string itemID)
 135    {
 838136        ItemToggle toggle = GetItemToggleByID(itemID);
 838137        if (toggle != null)
 419138            toggle.selected = false;
 838139    }
 140
 141    public void UnselectAll()
 142    {
 1584143        using (var iterator = itemToggles.GetEnumerator())
 144        {
 4196145            while (iterator.MoveNext())
 146            {
 2612147                iterator.Current.Value.selected = false;
 148            }
 1584149        }
 1584150    }
 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    {
 5520158        if (string.IsNullOrEmpty(itemID))
 0159            return null;
 5520160        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}