< 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
 81629    internal Dictionary<string, ItemToggle> itemToggles = new Dictionary<string, ItemToggle>();
 30
 31    private string currentBodyShape;
 32
 33    private void Awake()
 34    {
 13835        Application.quitting += () =>
 36        {
 037            OnItemClicked = null;
 038        };
 39
 13840        loadingRetryButton.onClick.AddListener(RetryLoading);
 13841    }
 42
 27643    private void OnDestroy() { loadingRetryButton.onClick.RemoveListener(RetryLoading); }
 44
 45    public void AddItemToggle(WearableItem item, int amount)
 46    {
 406847        if (item == null)
 048            return;
 406849        if (itemToggles.ContainsKey(item.id))
 050            return;
 51
 52        ItemToggle newToggle;
 406853        if (item.IsCollectible())
 54        {
 3655            newToggle = itemToggleFactory.CreateItemToggleFromRarity(item.rarity, itemContainer);
 3656            newToggle.transform.SetAsFirstSibling();
 3657        }
 58        else
 59        {
 403260            newToggle = itemToggleFactory.CreateBaseWearable(itemContainer);
 61        }
 62
 406863        newToggle.Initialize(item, false, amount);
 406864        newToggle.OnClicked += ToggleClicked;
 406865        newToggle.OnSellClicked += SellClicked;
 406866        itemToggles.Add(item.id, newToggle);
 67
 406868        bool active = string.IsNullOrEmpty(currentBodyShape) || item.SupportsBodyShape(currentBodyShape);
 406869        newToggle.gameObject.SetActive(active);
 406870    }
 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    {
 246587        using (var it = itemToggles.GetEnumerator())
 88        {
 523789            while (it.MoveNext())
 90            {
 277291                Destroy(it.Current.Value.gameObject);
 92            }
 246593        }
 94
 246595        itemToggles.Clear();
 246596    }
 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    {
 2006122        ItemToggle toggle = GetItemToggleByID(itemID);
 2006123        if (toggle != null)
 1028124            toggle.selected = true;
 2006125    }
 126
 127    public void SetWearableLoadingSpinner(string wearableID, bool isActive)
 128    {
 2880129        ItemToggle toggle = GetItemToggleByID(wearableID);
 2880130        if (toggle != null)
 1421131            toggle.SetLoadingSpinner(isActive);
 2880132    }
 133
 134    public void Unselect(string itemID)
 135    {
 886136        ItemToggle toggle = GetItemToggleByID(itemID);
 886137        if (toggle != null)
 443138            toggle.selected = false;
 886139    }
 140
 141    public void UnselectAll()
 142    {
 1650143        using (var iterator = itemToggles.GetEnumerator())
 144        {
 4370145            while (iterator.MoveNext())
 146            {
 2720147                iterator.Current.Value.selected = false;
 148            }
 1650149        }
 1650150    }
 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    {
 5772158        if (string.IsNullOrEmpty(itemID))
 0159            return null;
 5772160        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}