< Summary

Class:DCL.Backpack.VRMDetailsComponentView
Assembly:BackpackEditorHUDV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/VRMExport/VRMDetailsComponentView.cs
Covered lines:2
Uncovered lines:55
Coverable lines:57
Total lines:143
Line coverage:3.5% (2 of 57)
Covered branches:0
Total branches:0
Covered methods:1
Total methods:10
Method coverage:10% (1 of 10)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
VRMDetailsComponentView()0%110100%
Awake()0%2100%
Dispose()0%2100%
OnDisable()0%2100%
TearDown()0%6200%
GetItemDetailPool()0%6200%
OnVRMExportButtonClick()0%6200%
EnableVRMExport(...)0%2100%
RefreshControl()0%2100%
FillVRMBlockingWearablesList(...)0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/VRMExport/VRMDetailsComponentView.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6namespace DCL.Backpack
 7{
 8    public class VRMDetailsComponentView : BaseComponentView, IVRMDetailsComponentView
 9    {
 10        private const string VRM_EXPORT_DETAILS_POOL_ID = "VRMExportDetails";
 11        [SerializeField] private ButtonComponentView vrmExportButton;
 12        [SerializeField] private GameObject exportWarningBar;
 13        [SerializeField] private Button backButton;
 14        [SerializeField] private VRMDetailItemComponentView vrmDetailPrefab;
 15        [SerializeField] private Transform wearablesContainer;
 16
 17        private Pool wearableDetailPool;
 3718        private readonly List<(PoolableObject, VRMDetailItemComponentView)> pooledItems = new ();
 3719        private readonly List<string> equippedItemsURNs = new ();
 20
 21        public event Action OnBackButtonPressed;
 22        public event Action OnVRMExportButtonPressed;
 23        public event Action<VRMItemModel, UnequipWearableSource> OnWearableUnequipped;
 24        public event Action<VRMItemModel, EquipWearableSource> OnWearableEquipped;
 25
 26        public override void Awake()
 27        {
 028            base.Awake();
 029            vrmExportButton.onClick.RemoveAllListeners();
 030            vrmExportButton.onClick.AddListener(OnVRMExportButtonClick);
 31
 032            backButton.onClick.RemoveAllListeners();
 033            backButton.onClick.AddListener(() => OnBackButtonPressed?.Invoke());
 34
 035            wearableDetailPool = GetItemDetailPool();
 036        }
 37
 38        public override void Dispose()
 39        {
 040            base.Dispose();
 041            TearDown();
 042            vrmExportButton.onClick.RemoveAllListeners();
 043            backButton.onClick.RemoveAllListeners();
 044        }
 45
 46        public override void OnDisable()
 47        {
 048            base.OnDisable();
 49
 050            TearDown();
 051        }
 52
 53        private void TearDown()
 54        {
 055            foreach ((PoolableObject pooledItem, VRMDetailItemComponentView component) in pooledItems)
 56            {
 057                component.ClearOnWearableUnequippedEvents();
 058                pooledItem.Release();
 59            }
 60
 061            pooledItems.Clear();
 062        }
 63
 64        private Pool GetItemDetailPool()
 65        {
 066            var entryPool = PoolManager.i.GetPool(VRM_EXPORT_DETAILS_POOL_ID);
 067            if (entryPool != null) return entryPool;
 68
 069            entryPool = PoolManager.i.AddPool(
 70                VRM_EXPORT_DETAILS_POOL_ID,
 71                Instantiate(vrmDetailPrefab).gameObject,
 72                maxPrewarmCount: 5,
 73                isPersistent: true);
 74
 075            entryPool.ForcePrewarm();
 76
 077            return entryPool;
 78        }
 79
 80        private void OnVRMExportButtonClick()
 81        {
 082            OnVRMExportButtonPressed?.Invoke();
 083        }
 84
 85        private void EnableVRMExport(bool enable)
 86        {
 087            vrmExportButton.SetInteractable(enable);
 088            exportWarningBar.SetActive(!enable);
 089        }
 90
 091        public override void RefreshControl() { }
 92
 93        public void FillVRMBlockingWearablesList(List<NFTDataDTO> itemsToDisplay)
 94        {
 095            EnableVRMExport(false);
 096            equippedItemsURNs.Clear();
 97
 098            foreach (var itemData in itemsToDisplay)
 99            {
 0100                equippedItemsURNs.Add(itemData.urn);
 0101                var detailItem = wearableDetailPool.Get();
 0102                var detailComponentView = detailItem.gameObject.GetComponent<VRMDetailItemComponentView>();
 103
 0104                detailComponentView.transform.SetParent(wearablesContainer, false);
 0105                pooledItems.Add((detailItem, detailComponentView));
 106
 0107                var vrmItemModel = new VRMItemModel
 108                {
 109                    wearableUrn = itemData.urn,
 110                    wearableImageUrl = itemData.thumbnail,
 111                    wearableName = itemData.name,
 112                    wearableCategoryName = itemData.data.wearable.category,
 113                    wearableCreatorImageUrl = itemData.creatorImageUrl,
 114                    wearableCreatorName = itemData.creatorName,
 115                    wearableCanBeUnEquipped = itemData.canBeUnEquipped,
 116                };
 117
 0118                detailComponentView.SetModel(vrmItemModel);
 0119                detailComponentView.ClearOnWearableUnequippedEvents();
 120
 0121                detailComponentView.OnUnEquipWearable += () =>
 122                {
 0123                    equippedItemsURNs.Remove(itemData.urn);
 124
 0125                    if (equippedItemsURNs.Count == 0)
 0126                        EnableVRMExport(true);
 127
 0128                    OnWearableUnequipped?.Invoke(vrmItemModel, UnequipWearableSource.None);
 0129                };
 130
 0131                detailComponentView.OnEquipWearable += () =>
 132                {
 0133                    equippedItemsURNs.Add(itemData.urn);
 134
 0135                    if (equippedItemsURNs.Count > 0)
 0136                        EnableVRMExport(false);
 137
 0138                    OnWearableEquipped?.Invoke(vrmItemModel, EquipWearableSource.None);
 0139                };
 140            }
 0141        }
 142    }
 143}