< Summary

Class:SmartItemEntityParameter
Assembly:BuilderInWorldEntityInformation
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/EntityInformation/SmartItems/Parameters/SmartItemEntityParameter.cs
Covered lines:2
Uncovered lines:45
Coverable lines:47
Total lines:99
Line coverage:4.2% (2 of 47)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SmartItemEntityParameter()0%110100%
Start()0%2100%
SetEntityList(...)0%2100%
SetInfo()0%6200%
GenerateDropdownContent()0%30500%
GetThumbnail(...)0%30500%
SetThumbnail(...)0%6200%
OnValueChange(...)0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BuilderMode/EntityInformation/SmartItems/Parameters/SmartItemEntityParameter.cs

#LineLine coverage
 1using DCL;
 2using DCL.Components;
 3using System.Collections;
 4using System.Collections.Generic;
 5using TMPro;
 6using UnityEngine;
 7using UnityEngine.UI;
 8
 9public class SmartItemEntityParameter : SmartItemUIParameterAdapter, IEntityListHandler
 10{
 11    public TMP_Dropdown dropDown;
 12
 13    private List<DCLBuilderInWorldEntity> entitiesList;
 14
 215    private Dictionary<DCLBuilderInWorldEntity, Sprite> entitySpriteDict = new Dictionary<DCLBuilderInWorldEntity, Sprit
 216    private Dictionary<string, DCLBuilderInWorldEntity> entityPromiseKeeperDict = new Dictionary<string, DCLBuilderInWor
 17
 018    private void Start() { dropDown.onValueChanged.AddListener(OnValueChange); }
 19
 020    public void SetEntityList(List<DCLBuilderInWorldEntity> entitiesList) { this.entitiesList = entitiesList; }
 21
 22    public override void SetInfo()
 23    {
 024        base.SetInfo();
 25
 026        GenerateDropdownContent();
 027        foreach (DCLBuilderInWorldEntity entity in entitiesList)
 28        {
 029            GetThumbnail(entity);
 30        }
 031    }
 32
 33    void GenerateDropdownContent()
 34    {
 035        dropDown.ClearOptions();
 36
 037        dropDown.options = new List<TMP_Dropdown.OptionData>();
 38
 039        List<TMP_Dropdown.OptionData> optionsList = new List<TMP_Dropdown.OptionData>();
 040        foreach (DCLBuilderInWorldEntity entity in entitiesList)
 41        {
 042            var item = new TMP_Dropdown.OptionData();
 043            item.text = entity.GetDescriptiveName();
 044            if (entitySpriteDict.ContainsKey(entity))
 045                item.image = entitySpriteDict[entity];
 046            optionsList.Add(item);
 47        }
 48
 049        dropDown.AddOptions(optionsList);
 50
 51
 052        string value = (string)GetParameterValue();
 53
 054        for (int i = 0; i < entitiesList.Count; i++)
 55        {
 056            if (entitiesList[i].rootEntity.entityId == value)
 057                dropDown.SetValueWithoutNotify(i);
 58        }
 059    }
 60
 61    private void GetThumbnail(DCLBuilderInWorldEntity entity)
 62    {
 063        var url = entity.GetCatalogItemAssociated()?.thumbnailURL;
 64
 065        if (string.IsNullOrEmpty(url))
 066            return;
 67
 068        string newLoadedThumbnailURL = url;
 069        var newLoadedThumbnailPromise = new AssetPromise_Texture(url);
 70
 071        string promiseId = newLoadedThumbnailPromise.GetId().ToString();
 072        if (!entityPromiseKeeperDict.ContainsKey(promiseId))
 073            entityPromiseKeeperDict.Add(promiseId, entity);
 074        newLoadedThumbnailPromise.OnSuccessEvent += SetThumbnail;
 075        newLoadedThumbnailPromise.OnFailEvent += x => { Debug.Log($"Error downloading: {url}"); };
 76
 077        AssetPromiseKeeper_Texture.i.Keep(newLoadedThumbnailPromise);
 078    }
 79
 80    public void SetThumbnail(Asset_Texture texture)
 81    {
 082        if (!entityPromiseKeeperDict.ContainsKey(texture.id.ToString()))
 083            return;
 84
 085        Vector2 pivot = new Vector2(0.5f, 0.5f);
 086        Sprite spriteToUse = Sprite.Create(texture.texture, new Rect(0, 0, texture.width, texture.height), pivot);
 087        entitySpriteDict.Add(entityPromiseKeeperDict[texture.id.ToString()], spriteToUse);
 088        GenerateDropdownContent();
 089    }
 90
 91    private void OnValueChange(int currentIndex)
 92    {
 093        foreach (DCLBuilderInWorldEntity entity in entitiesList)
 94        {
 095            if (entity.GetDescriptiveName() == dropDown.options[currentIndex].text)
 096                SetParameterValue(entity.rootEntity.entityId);
 97        }
 098    }
 99}