< Summary

Class:DCL.Social.Passports.PlayerPassportHUDView
Assembly:PassportHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/Passport/Passport/PlayerPassportHUDView.cs
Covered lines:1
Uncovered lines:61
Coverable lines:62
Total lines:136
Line coverage:1.6% (1 of 62)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PlayerPassportHUDView()0%110100%
CreateView()0%2100%
Initialize(...)0%6200%
SetVisibility(...)0%2100%
SetPassportPanelVisibility(...)0%20400%
ShowPassportAnimation()0%30500%
HidePassportAnimation()0%30500%
RefreshControl()0%2100%
Dispose()0%20400%
ClosePassport()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/Passport/Passport/PlayerPassportHUDView.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using System;
 3using UnityEngine;
 4using UnityEngine.UI;
 5using DG.Tweening;
 6using System.Threading;
 7
 8namespace DCL.Social.Passports
 9{
 10    public class PlayerPassportHUDView : BaseComponentView, IPlayerPassportHUDView
 11    {
 12        [SerializeField] internal Button hideCardButton;
 13        [SerializeField] internal Button hideCardButtonGuest;
 14        [SerializeField] internal Button backgroundButton;
 15        [SerializeField] internal GameObject container;
 16        [SerializeField] internal RectTransform passportMask;
 17        [SerializeField] internal Canvas passportCanvas;
 18        [SerializeField] internal CanvasGroup passportCanvasGroup;
 19
 020        public int PassportCurrentSortingOrder => passportCanvas.sortingOrder;
 21
 22        public event Action OnClose;
 23
 124        private CancellationTokenSource animationCancellationToken = new CancellationTokenSource();
 25        private MouseCatcher mouseCatcher;
 26
 27        public static PlayerPassportHUDView CreateView() =>
 028            Instantiate(Resources.Load<GameObject>("PlayerPassport")).GetComponent<PlayerPassportHUDView>();
 29
 30        public void Initialize(MouseCatcher mouseCatcher)
 31        {
 032            hideCardButton.onClick.RemoveAllListeners();
 033            hideCardButton.onClick.AddListener(ClosePassport);
 034            hideCardButtonGuest.onClick.RemoveAllListeners();
 035            hideCardButtonGuest.onClick.AddListener(ClosePassport);
 036            backgroundButton.onClick.RemoveAllListeners();
 037            backgroundButton.onClick.AddListener(ClosePassport);
 038            this.mouseCatcher = mouseCatcher;
 39
 040            if (mouseCatcher != null)
 041                mouseCatcher.OnMouseDown += ClosePassport;
 042        }
 43
 44        public void SetVisibility(bool visible)
 45        {
 046            gameObject.SetActive(visible);
 047        }
 48
 49        public void SetPassportPanelVisibility(bool visible)
 50        {
 051            if (visible && mouseCatcher != null)
 52            {
 053                mouseCatcher.UnlockCursor();
 54            }
 55
 056            animationCancellationToken.Cancel();
 057            animationCancellationToken = new CancellationTokenSource();
 58
 059            if (visible)
 60            {
 061                container.SetActive(true);
 062                ShowPassportAnimation(animationCancellationToken.Token).Forget();
 63            }
 64            else
 65            {
 066                HidePassportAnimation(animationCancellationToken.Token);
 67            }
 68
 069        }
 70
 71        private async UniTaskVoid ShowPassportAnimation(CancellationToken cancellationToken)
 72        {
 073            cancellationToken.ThrowIfCancellationRequested();
 074            passportMask.anchoredPosition = new Vector2(0, -180);
 075            passportCanvasGroup.alpha = 0;
 076            passportCanvasGroup.DOFade(1, 0.3f)
 77                          .SetEase(Ease.Linear);
 78            try
 79            {
 080                Vector2 endPosition = new Vector2(0, 0);
 081                Vector2 currentPosition = passportMask.anchoredPosition;
 082                DOTween.To(() => currentPosition, x => currentPosition = x, endPosition, 0.3f).SetEase(Ease.OutBack);
 083                while (passportMask.anchoredPosition.y < 0)
 84                {
 085                    passportMask.anchoredPosition = currentPosition;
 086                    await UniTask.NextFrame(cancellationToken);
 87                }
 088            }
 089            catch (OperationCanceledException) { }
 090        }
 91
 92        private async UniTaskVoid HidePassportAnimation(CancellationToken cancellationToken)
 93        {
 094            cancellationToken.ThrowIfCancellationRequested();
 095            passportMask.anchoredPosition = new Vector2(0, 0);
 096            passportCanvasGroup.alpha = 1;
 097            passportCanvasGroup.DOFade(0, 0.3f)
 98                          .SetEase(Ease.Linear);
 99            try
 100            {
 0101                Vector2 endPosition = new Vector2(0, -180);
 0102                Vector2 currentPosition = passportMask.anchoredPosition;
 0103                DOTween.To(() => currentPosition, x => currentPosition = x, endPosition, 0.3f).SetEase(Ease.InBack);
 0104                while (passportMask.anchoredPosition.y > -180)
 105                {
 0106                    passportMask.anchoredPosition = currentPosition;
 0107                    await UniTask.NextFrame(cancellationToken);
 108                }
 0109                container.SetActive(false);
 0110            }
 0111            catch (OperationCanceledException)
 112            {
 0113                Debug.LogError("Cancelled show passport animation");
 0114            }
 0115        }
 116
 117        public override void RefreshControl()
 118        {
 0119        }
 120
 121        public override void Dispose()
 122        {
 0123            if (mouseCatcher != null)
 0124                mouseCatcher.OnMouseDown -= ClosePassport;
 125
 0126            animationCancellationToken?.Cancel();
 0127            animationCancellationToken?.Dispose();
 0128            animationCancellationToken = null;
 0129        }
 130
 131        private void ClosePassport()
 132        {
 0133            OnClose?.Invoke();
 0134        }
 135    }
 136}