< Summary

Class:DCL.AvatarModifierAreaFeedback.AvatarModifierAreaFeedbackView
Assembly:AvatarModifieraAreaHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarModifierAreaHUD/Scripts/AvatarModifierAreaFeedbackView.cs
Covered lines:0
Uncovered lines:80
Coverable lines:80
Total lines:186
Line coverage:0% (0 of 80)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:15
Method coverage:0% (0 of 15)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AvatarModifierAreaFeedbackView()0%2100%
Create()0%2100%
Awake()0%2100%
SetUp(...)0%12300%
SetWorldMode(...)0%30500%
RemovedWarning(...)0%6200%
AddedNewWarning(...)0%2100%
Show()0%12300%
Hide()0%6200%
OnPointerEnter(...)0%6200%
OnPointerExit(...)0%6200%
HideFirstTimeWarningMessageUniTask()0%42600%
Dispose()0%20400%
GetWarningMessage(...)0%12300%
ResetAllTriggers()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarModifierAreaHUD/Scripts/AvatarModifierAreaFeedbackView.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Threading;
 4using Cysharp.Threading.Tasks;
 5using TMPro;
 6using UnityEngine;
 7using UnityEngine.EventSystems;
 8
 9namespace DCL.AvatarModifierAreaFeedback
 10{
 11    public class AvatarModifierAreaFeedbackView : MonoBehaviour, IAvatarModifierAreaFeedbackView, IPointerEnterHandler, 
 12    {
 13        internal enum AvatarModifierAreaFeedbackState { NEVER_SHOWN, ICON_VISIBLE, WARNING_MESSAGE_VISIBLE, NONE_VISIBLE
 14
 15        private const string PATH = "_AvatarModifierAreaFeedbackHUD";
 16        private const string PATH_TO_WARNING_MESSAGE = "_WarningMessageAreaFeedbackHUD";
 17        private BaseRefCounter<AvatarModifierAreaID> avatarAreaWarningsCounter;
 18        private HUDCanvasCameraModeController hudCanvasCameraModeController;
 19
 20
 21        [SerializeField] internal RectTransform warningContainer;
 22        [SerializeField] private CanvasGroup pointerEnterTriggerArea;
 23        [SerializeField] private Animator messageAnimator;
 24        [SerializeField] private RectTransform contentTransform;
 25        [SerializeField] private RectTransform containerForLandsTransform;
 26        [SerializeField] private RectTransform containerForWorldsTransform;
 27        [SerializeField] private Canvas mainCanvas;
 28
 29        internal bool isVisible;
 30        internal AvatarModifierAreaFeedbackState currentState;
 31        internal Dictionary<AvatarModifierAreaID, GameObject> warningMessagesDictionary;
 032        internal CancellationTokenSource deactivatePreviewCancellationToken = new CancellationTokenSource();
 33
 034        private string msgOutAnimationTrigger = "MsgOut";
 035        private string msgInAnimationTrigger = "MsgIn";
 036        private string iconInAnimationTrigger = "IconIn";
 037        private string iconOutAnimationTrigger = "IconOut";
 38
 039        public static AvatarModifierAreaFeedbackView Create() { return Instantiate(Resources.Load<GameObject>(PATH)).Get
 40
 41        public void Awake()
 42        {
 043            currentState = AvatarModifierAreaFeedbackState.NEVER_SHOWN;
 044            hudCanvasCameraModeController = new HUDCanvasCameraModeController(GetComponent<Canvas>(), DataStore.i.camera
 045        }
 46
 47        public void SetUp(BaseRefCounter<AvatarModifierAreaID> avatarAreaWarnings)
 48        {
 049            avatarAreaWarningsCounter = avatarAreaWarnings;
 050            avatarAreaWarningsCounter.OnAdded += AddedNewWarning;
 051            avatarAreaWarningsCounter.OnRemoved += RemovedWarning;
 52
 053            warningMessagesDictionary = new Dictionary<AvatarModifierAreaID, GameObject>();
 54
 055            foreach (AvatarModifierAreaID warningMessageEnum in Enum.GetValues(typeof(AvatarModifierAreaID)))
 56            {
 057                GameObject newWarningMessage = Instantiate(Resources.Load<GameObject>(PATH_TO_WARNING_MESSAGE), warningC
 058                newWarningMessage.GetComponent<TMP_Text>().text = GetWarningMessage(warningMessageEnum);
 059                newWarningMessage.SetActive(false);
 060                warningMessagesDictionary.Add(warningMessageEnum, newWarningMessage);
 61            }
 062        }
 63
 64        public void SetWorldMode(bool isWorld)
 65        {
 066            contentTransform.SetParent(isWorld ? containerForWorldsTransform : containerForLandsTransform);
 067            contentTransform.offsetMin = Vector2.zero;
 068            contentTransform.offsetMax = Vector2.zero;
 069            contentTransform.anchoredPosition = Vector2.zero;
 070            mainCanvas.sortingOrder = isWorld ? 1 : 0;
 071        }
 72
 73        private void RemovedWarning(AvatarModifierAreaID obj)
 74        {
 075            warningMessagesDictionary[obj].gameObject.SetActive(false);
 076            if (avatarAreaWarningsCounter.Count().Equals(0))
 77            {
 078                Hide();
 79            }
 080        }
 81        private void AddedNewWarning(AvatarModifierAreaID obj)
 82        {
 083            warningMessagesDictionary[obj].gameObject.SetActive(true);
 084            Show();
 085        }
 86
 87        private void Show()
 88        {
 089            if (isVisible) return;
 090            isVisible = true;
 091            ResetAllTriggers();
 92
 093            if (currentState.Equals(AvatarModifierAreaFeedbackState.NEVER_SHOWN))
 94            {
 095                messageAnimator.SetTrigger(msgInAnimationTrigger);
 096                HideFirstTimeWarningMessageUniTask(deactivatePreviewCancellationToken.Token).Forget();
 097                currentState = AvatarModifierAreaFeedbackState.WARNING_MESSAGE_VISIBLE;
 98            }
 99            else
 100            {
 0101                messageAnimator.SetTrigger(iconInAnimationTrigger);
 0102                pointerEnterTriggerArea.blocksRaycasts = true;
 0103                currentState = AvatarModifierAreaFeedbackState.ICON_VISIBLE;
 104            }
 0105        }
 106
 107        private void Hide()
 108        {
 0109            isVisible = false;
 110
 0111            deactivatePreviewCancellationToken.Cancel();
 112
 0113            pointerEnterTriggerArea.blocksRaycasts = false;
 114
 0115            if (currentState.Equals(AvatarModifierAreaFeedbackState.WARNING_MESSAGE_VISIBLE))
 116            {
 0117                messageAnimator.SetTrigger(msgOutAnimationTrigger);
 118            }
 119            else
 120            {
 0121                messageAnimator.SetTrigger(iconOutAnimationTrigger);
 122            }
 0123            currentState = AvatarModifierAreaFeedbackState.NONE_VISIBLE;
 0124        }
 125
 126        public void OnPointerEnter(PointerEventData eventData)
 127        {
 0128            if (!isVisible) return;
 129
 0130            messageAnimator.SetTrigger(msgInAnimationTrigger);
 0131            currentState = AvatarModifierAreaFeedbackState.WARNING_MESSAGE_VISIBLE;
 0132        }
 133
 134        public void OnPointerExit(PointerEventData eventData)
 135        {
 0136            if (!isVisible) return;
 137
 0138            messageAnimator.SetTrigger(iconInAnimationTrigger);
 0139            currentState = AvatarModifierAreaFeedbackState.ICON_VISIBLE;
 0140        }
 141
 142
 143        async UniTaskVoid HideFirstTimeWarningMessageUniTask(CancellationToken cancellationToken)
 144        {
 0145            await UniTask.Delay(5000, cancellationToken: cancellationToken);
 0146            await UniTask.SwitchToMainThread(cancellationToken);
 0147            if (cancellationToken.IsCancellationRequested) return;
 0148            messageAnimator.SetTrigger(iconInAnimationTrigger);
 149
 0150            currentState = AvatarModifierAreaFeedbackState.ICON_VISIBLE;
 0151            pointerEnterTriggerArea.blocksRaycasts = true;
 0152        }
 153
 154        public void Dispose()
 155        {
 0156            deactivatePreviewCancellationToken?.Cancel();
 0157            deactivatePreviewCancellationToken?.Dispose();
 0158            avatarAreaWarningsCounter.OnAdded -= AddedNewWarning;
 0159            avatarAreaWarningsCounter.OnRemoved -= RemovedWarning;
 0160      hudCanvasCameraModeController?.Dispose();
 0161        }
 162
 163        private string GetWarningMessage(AvatarModifierAreaID idToSet)
 164        {
 165            switch (idToSet)
 166            {
 167                case AvatarModifierAreaID.HIDE_AVATAR:
 0168                    return "\u2022  The avatars are hidden";
 169                case AvatarModifierAreaID.DISABLE_PASSPORT:
 0170                    return "\u2022  Your passport is disabled for\n    other players";
 171                default:
 0172                    throw new NotImplementedException();
 173            }
 174        }
 175
 176        private void ResetAllTriggers()
 177        {
 0178            messageAnimator.ResetTrigger(msgOutAnimationTrigger);
 0179            messageAnimator.ResetTrigger(msgInAnimationTrigger);
 0180            messageAnimator.ResetTrigger(iconInAnimationTrigger);
 0181            messageAnimator.ResetTrigger(iconOutAnimationTrigger);
 0182        }
 183
 184
 185    }
 186}