< Summary

Class:SceneCardView
Assembly:BuilderProjectsPanel
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BuilderProjectsPanel/Scripts/Views/SceneCardView.cs
Covered lines:70
Uncovered lines:28
Coverable lines:98
Total lines:263
Line coverage:71.4% (70 of 98)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SceneCardView()0%110100%
get_searchInfo()0%110100%
SceneCardView()0%110100%
get_sceneData()0%110100%
get_contextMenuButtonPosition()0%2100%
Awake()0%110100%
JumpInButtonPressed()0%6200%
EditorButtonPressed()0%6200%
OnEnable()0%110100%
Setup(...)0%33092.86%
SetParent(...)0%220100%
SetName(...)0%110100%
SetCoords(...)0%110100%
SetSize(...)0%110100%
SetThumbnail(...)0%14.724012.5%
SetThumbnail(...)0%6200%
SetDeployed(...)0%110100%
SetUserRole(...)0%4.064084.62%
SetActive(...)0%110100%
SetSiblingIndex(...)0%110100%
SetToDefaultParent()0%110100%
ConfigureDefaultParent(...)0%110100%
SetEditable(...)0%110100%
Dispose()0%220100%
OnDestroy()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BuilderProjectsPanel/Scripts/Views/SceneCardView.cs

#LineLine coverage
 1using DCL;
 2using DCL.Helpers;
 3using System;
 4using TMPro;
 5using UnityEngine;
 6using UnityEngine.UI;
 7
 8internal interface ISceneCardView : IDisposable
 9{
 10    event Action<Vector2Int> OnJumpInPressed;
 11    event Action<Vector2Int> OnEditorPressed;
 12    event Action<ISceneData> OnSettingsPressed;
 13    event Action<ISceneData, ISceneCardView> OnContextMenuPressed;
 14    ISceneData sceneData { get; }
 15    ISearchInfo searchInfo { get; }
 16    Vector3 contextMenuButtonPosition { get; }
 17    void Setup(ISceneData sceneData);
 18    void SetParent(Transform parent);
 19    void SetToDefaultParent();
 20    void ConfigureDefaultParent(Transform parent);
 21    void SetName(string name);
 22    void SetCoords(Vector2Int coords);
 23    void SetSize(Vector2Int size);
 24    void SetThumbnail(string thumbnailUrl);
 25    void SetThumbnail(Texture2D thumbnailTexture);
 26    void SetDeployed(bool deployed);
 27    void SetEditable(bool isEditable);
 28    void SetUserRole(bool isOwner, bool isOperator, bool isContributor);
 29    void SetActive(bool active);
 30    void SetSiblingIndex(int index);
 31}
 32
 33internal class SceneCardView : MonoBehaviour, ISceneCardView
 34{
 35    const int THMBL_MARKETPLACE_WIDTH = 196;
 36    const int THMBL_MARKETPLACE_HEIGHT = 143;
 37    const int THMBL_MARKETPLACE_SIZEFACTOR = 50;
 38
 139    static readonly Vector3 CONTEXT_MENU_OFFSET = new Vector3(6.24f, 12f, 0);
 40
 41    public event Action<Vector2Int> OnJumpInPressed;
 42    public event Action<Vector2Int> OnEditorPressed;
 43    public event Action<ISceneData> OnSettingsPressed;
 44    public event Action<ISceneData, ISceneCardView> OnContextMenuPressed;
 45
 46    [SerializeField] private Texture2D defaultThumbnail;
 47
 48    [Space]
 49    [SerializeField] private RawImageFillParent thumbnail;
 50
 51    [SerializeField] private TextMeshProUGUI sceneName;
 52
 53    [Space]
 54    [SerializeField] internal GameObject coordsContainer;
 55
 56    [SerializeField] private TextMeshProUGUI coordsText;
 57
 58    [Space]
 59    [SerializeField] internal GameObject sizeContainer;
 60
 61    [SerializeField] private TextMeshProUGUI sizeText;
 62
 63    [Space]
 64    [SerializeField] internal Button jumpInButton;
 65
 66    [SerializeField] internal Button editorButton;
 67    [SerializeField] internal Button contextMenuButton;
 68    [SerializeField] internal Button settingsButton;
 69
 70    [Space]
 71    [SerializeField] internal GameObject roleOwnerGO;
 72
 73    [SerializeField] internal GameObject roleOperatorGO;
 74    [SerializeField] internal GameObject roleContributorGO;
 75
 76    [Space]
 77    [SerializeField] internal GameObject editorLockedGO;
 78
 79    [SerializeField] internal GameObject editorLockedTooltipGO;
 80
 81    [SerializeField] internal Animator loadingAnimator;
 82
 183    private static readonly int isLoadingAnimation = Animator.StringToHash("isLoading");
 84
 32185    ISearchInfo ISceneCardView.searchInfo { get; } = new SearchInfo();
 9386    ISceneData ISceneCardView.sceneData => sceneData;
 087    Vector3 ISceneCardView.contextMenuButtonPosition => contextMenuButton.transform.position + CONTEXT_MENU_OFFSET;
 88
 89    private ISceneData sceneData;
 90    private string thumbnailUrl = null;
 91    private AssetPromise_Texture thumbnailPromise;
 92    private bool isDestroyed = false;
 93    private Transform defaultParent;
 94    private bool isLoadingThumbnail = false;
 95
 96    private void Awake()
 97    {
 3398        jumpInButton.onClick.AddListener( JumpInButtonPressed );
 3399        editorButton.onClick.AddListener( EditorButtonPressed );
 33100        contextMenuButton.onClick.AddListener(() => OnContextMenuPressed?.Invoke(sceneData, this));
 33101        settingsButton.onClick.AddListener(() => OnSettingsPressed?.Invoke(sceneData));
 102
 33103        editorLockedGO.SetActive(false);
 33104        editorLockedTooltipGO.SetActive(false);
 33105    }
 106
 107    private void JumpInButtonPressed()
 108    {
 0109        OnJumpInPressed?.Invoke(sceneData.coords);
 0110        BIWAnalytics.PlayerJumpOrEdit("Scene", "JumpIn", sceneData.coords, "Scene Owner");
 0111    }
 112
 113    private void EditorButtonPressed()
 114    {
 0115        OnEditorPressed?.Invoke(sceneData.coords);
 0116        BIWAnalytics.PlayerJumpOrEdit("Scene", "Editor", sceneData.coords, "Scene Owner");
 0117    }
 118
 146119    private void OnEnable() { loadingAnimator.SetBool(isLoadingAnimation, isLoadingThumbnail); }
 120
 121    void ISceneCardView.Setup(ISceneData sceneData)
 122    {
 51123        this.sceneData = sceneData;
 124
 51125        string sceneThumbnailUrl = sceneData.thumbnailUrl;
 51126        if (string.IsNullOrEmpty(sceneThumbnailUrl) && sceneData.parcels != null)
 127        {
 0128            sceneThumbnailUrl = MapUtils.GetMarketPlaceThumbnailUrl(sceneData.parcels,
 129                THMBL_MARKETPLACE_WIDTH, THMBL_MARKETPLACE_HEIGHT, THMBL_MARKETPLACE_SIZEFACTOR);
 130        }
 131
 51132        ISceneCardView thisView = this;
 51133        thisView.SetThumbnail(sceneThumbnailUrl);
 51134        thisView.SetName(sceneData.name);
 51135        thisView.SetCoords(sceneData.coords);
 51136        thisView.SetSize(sceneData.size);
 51137        thisView.SetDeployed(sceneData.isDeployed);
 51138        thisView.SetUserRole(sceneData.isOwner, sceneData.isOperator, sceneData.isContributor);
 51139        thisView.SetEditable(sceneData.isEditable);
 140
 51141        thisView.searchInfo.SetId(sceneData.id);
 51142    }
 143
 144    void ISceneCardView.SetParent(Transform parent)
 145    {
 41146        if (transform.parent == parent)
 15147            return;
 148
 26149        transform.SetParent(parent);
 26150        transform.ResetLocalTRS();
 26151    }
 152
 153    void ISceneCardView.SetName(string name)
 154    {
 51155        sceneName.text = name;
 51156        ((ISceneCardView)this).searchInfo.SetName(name);
 51157    }
 158
 159    void ISceneCardView.SetCoords(Vector2Int coords)
 160    {
 51161        string coordStr = $"{coords.x},{coords.y}";
 51162        coordsText.text = coordStr;
 51163        ((ISceneCardView)this).searchInfo.SetCoords(coordStr);
 51164    }
 165
 166    void ISceneCardView.SetSize(Vector2Int size)
 167    {
 51168        sizeText.text = $"{size.x},{size.y}m";
 51169        ((ISceneCardView)this).searchInfo.SetSize(size.x * size.y);
 51170    }
 171
 172    void ISceneCardView.SetThumbnail(string thumbnailUrl)
 173    {
 51174        if (this.thumbnailUrl == thumbnailUrl)
 51175            return;
 176
 0177        this.thumbnailUrl = thumbnailUrl;
 178
 0179        isLoadingThumbnail = true;
 0180        loadingAnimator.SetBool(isLoadingAnimation, isLoadingThumbnail);
 181
 0182        if (thumbnailPromise != null)
 183        {
 0184            AssetPromiseKeeper_Texture.i.Forget(thumbnailPromise);
 0185            thumbnailPromise = null;
 186        }
 187
 188
 0189        if (string.IsNullOrEmpty(thumbnailUrl))
 190        {
 0191            ((ISceneCardView)this).SetThumbnail((Texture2D) null);
 0192            return;
 193        }
 194
 0195        thumbnailPromise = new AssetPromise_Texture(thumbnailUrl);
 0196        thumbnailPromise.OnSuccessEvent += texture => ((ISceneCardView)this).SetThumbnail(texture.texture);
 0197        thumbnailPromise.OnFailEvent += texture => ((ISceneCardView)this).SetThumbnail((Texture2D) null);
 198
 0199        AssetPromiseKeeper_Texture.i.Keep(thumbnailPromise);
 0200    }
 201
 202    void ISceneCardView.SetThumbnail(Texture2D thumbnailTexture)
 203    {
 0204        thumbnail.texture = thumbnailTexture ?? defaultThumbnail;
 0205        isLoadingThumbnail = false;
 0206        loadingAnimator.SetBool(isLoadingAnimation, isLoadingThumbnail);
 0207    }
 208
 209    void ISceneCardView.SetDeployed(bool deployed)
 210    {
 51211        coordsContainer.SetActive(deployed);
 51212        sizeContainer.SetActive(!deployed);
 51213        jumpInButton.gameObject.SetActive(deployed);
 51214    }
 215
 216    void ISceneCardView.SetUserRole(bool isOwner, bool isOperator, bool isContributor)
 217    {
 51218        roleOwnerGO.SetActive(false);
 51219        roleOperatorGO.SetActive(false);
 51220        roleContributorGO.SetActive(false);
 51221        ((ISceneCardView)this).searchInfo.SetRole(isOwner);
 222
 51223        if (isOwner)
 224        {
 1225            roleOwnerGO.SetActive(true);
 1226        }
 50227        else if (isOperator)
 228        {
 0229            roleOperatorGO.SetActive(true);
 0230        }
 50231        else if (isContributor)
 232        {
 3233            roleContributorGO.SetActive(true);
 234        }
 50235    }
 236
 136237    void ISceneCardView.SetActive(bool active) { gameObject.SetActive(active); }
 238
 82239    void ISceneCardView.SetSiblingIndex(int index) { transform.SetSiblingIndex(index); }
 26240    void ISceneCardView.SetToDefaultParent() { transform.SetParent(defaultParent); }
 241
 14242    void ISceneCardView.ConfigureDefaultParent(Transform parent) { defaultParent = parent; }
 243
 244    void ISceneCardView.SetEditable(bool isEditable)
 245    {
 51246        editorButton.gameObject.SetActive(isEditable);
 51247        editorLockedGO.SetActive(!isEditable);
 51248    }
 249
 250    public void Dispose()
 251    {
 27252        if (!isDestroyed)
 253        {
 27254            Destroy(gameObject);
 255        }
 27256    }
 257
 258    private void OnDestroy()
 259    {
 33260        AssetPromiseKeeper_Texture.i.Forget(thumbnailPromise);
 33261        isDestroyed = true;
 33262    }
 263}