< 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:5
Uncovered lines:69
Coverable lines:74
Total lines:175
Line coverage:6.7% (5 of 74)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AvatarModifierAreaFeedbackView()0%110100%
Create()0%2100%
Awake()0%2100%
SetUp(...)0%12300%
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;
 3using System.Collections.Generic;
 4using System.Threading;
 5using Cysharp.Threading.Tasks;
 6using TMPro;
 7using UnityEngine;
 8using UnityEngine.EventSystems;
 9
 10namespace DCL.AvatarModifierAreaFeedback
 11{
 12    public class AvatarModifierAreaFeedbackView : MonoBehaviour, IAvatarModifierAreaFeedbackView, IPointerEnterHandler, 
 13    {
 14
 15        internal enum AvatarModifierAreaFeedbackState { NEVER_SHOWN, ICON_VISIBLE, WARNING_MESSAGE_VISIBLE, NONE_VISIBLE
 16
 17        private const string PATH = "_AvatarModifierAreaFeedbackHUD";
 18        private const string PATH_TO_WARNING_MESSAGE = "_WarningMessageAreaFeedbackHUD";
 19        private BaseRefCounter<AvatarModifierAreaID> avatarAreaWarningsCounter;
 20        private HUDCanvasCameraModeController hudCanvasCameraModeController;
 21
 22
 23        [SerializeField] internal RectTransform warningContainer;
 24        [SerializeField] private CanvasGroup pointerEnterTriggerArea;
 25        [SerializeField] private Animator messageAnimator;
 26
 27        internal bool isVisible;
 28        internal AvatarModifierAreaFeedbackState currentState;
 29        internal Dictionary<AvatarModifierAreaID, GameObject> warningMessagesDictionary;
 130        internal CancellationTokenSource deactivatePreviewCancellationToken = new CancellationTokenSource();
 31
 132        private string msgOutAnimationTrigger = "MsgOut";
 133        private string msgInAnimationTrigger = "MsgIn";
 134        private string iconInAnimationTrigger = "IconIn";
 135        private string iconOutAnimationTrigger = "IconOut";
 36
 037        public static AvatarModifierAreaFeedbackView Create() { return Instantiate(Resources.Load<GameObject>(PATH)).Get
 38
 39        public void Awake()
 40        {
 041            currentState = AvatarModifierAreaFeedbackState.NEVER_SHOWN;
 042            hudCanvasCameraModeController = new HUDCanvasCameraModeController(GetComponent<Canvas>(), DataStore.i.camera
 043        }
 44
 45        public void SetUp(BaseRefCounter<AvatarModifierAreaID> avatarAreaWarnings)
 46        {
 047            avatarAreaWarningsCounter = avatarAreaWarnings;
 048            avatarAreaWarningsCounter.OnAdded += AddedNewWarning;
 049            avatarAreaWarningsCounter.OnRemoved += RemovedWarning;
 50
 051            warningMessagesDictionary = new Dictionary<AvatarModifierAreaID, GameObject>();
 52
 053            foreach (AvatarModifierAreaID warningMessageEnum in Enum.GetValues(typeof(AvatarModifierAreaID)))
 54            {
 055                GameObject newWarningMessage = Instantiate(Resources.Load<GameObject>(PATH_TO_WARNING_MESSAGE), warningC
 056                newWarningMessage.GetComponent<TMP_Text>().text = GetWarningMessage(warningMessageEnum);
 057                newWarningMessage.SetActive(false);
 058                warningMessagesDictionary.Add(warningMessageEnum, newWarningMessage);
 59            }
 060        }
 61
 62        private void RemovedWarning(AvatarModifierAreaID obj)
 63        {
 064            warningMessagesDictionary[obj].gameObject.SetActive(false);
 065            if (avatarAreaWarningsCounter.Count().Equals(0))
 66            {
 067                Hide();
 68            }
 069        }
 70        private void AddedNewWarning(AvatarModifierAreaID obj)
 71        {
 072            warningMessagesDictionary[obj].gameObject.SetActive(true);
 073            Show();
 074        }
 75
 76        private void Show()
 77        {
 078            if (isVisible) return;
 079            isVisible = true;
 080            ResetAllTriggers();
 81
 082            if (currentState.Equals(AvatarModifierAreaFeedbackState.NEVER_SHOWN))
 83            {
 084                messageAnimator.SetTrigger(msgInAnimationTrigger);
 085                HideFirstTimeWarningMessageUniTask(deactivatePreviewCancellationToken.Token).Forget();
 086                currentState = AvatarModifierAreaFeedbackState.WARNING_MESSAGE_VISIBLE;
 87            }
 88            else
 89            {
 090                messageAnimator.SetTrigger(iconInAnimationTrigger);
 091                pointerEnterTriggerArea.blocksRaycasts = true;
 092                currentState = AvatarModifierAreaFeedbackState.ICON_VISIBLE;
 93            }
 094        }
 95
 96        private void Hide()
 97        {
 098            isVisible = false;
 99
 0100            deactivatePreviewCancellationToken.Cancel();
 101
 0102            pointerEnterTriggerArea.blocksRaycasts = false;
 103
 0104            if (currentState.Equals(AvatarModifierAreaFeedbackState.WARNING_MESSAGE_VISIBLE))
 105            {
 0106                messageAnimator.SetTrigger(msgOutAnimationTrigger);
 107            }
 108            else
 109            {
 0110                messageAnimator.SetTrigger(iconOutAnimationTrigger);
 111            }
 0112            currentState = AvatarModifierAreaFeedbackState.NONE_VISIBLE;
 0113        }
 114
 115        public void OnPointerEnter(PointerEventData eventData)
 116        {
 0117            if (!isVisible) return;
 118
 0119            messageAnimator.SetTrigger(msgInAnimationTrigger);
 0120            currentState = AvatarModifierAreaFeedbackState.WARNING_MESSAGE_VISIBLE;
 0121        }
 122
 123        public void OnPointerExit(PointerEventData eventData)
 124        {
 0125            if (!isVisible) return;
 126
 0127            messageAnimator.SetTrigger(iconInAnimationTrigger);
 0128            currentState = AvatarModifierAreaFeedbackState.ICON_VISIBLE;
 0129        }
 130
 131
 132        async UniTaskVoid HideFirstTimeWarningMessageUniTask(CancellationToken cancellationToken)
 133        {
 0134            await UniTask.Delay(5000, cancellationToken: cancellationToken);
 0135            await UniTask.SwitchToMainThread(cancellationToken);
 0136            if (cancellationToken.IsCancellationRequested) return;
 0137            messageAnimator.SetTrigger(iconInAnimationTrigger);
 138
 0139            currentState = AvatarModifierAreaFeedbackState.ICON_VISIBLE;
 0140            pointerEnterTriggerArea.blocksRaycasts = true;
 0141        }
 142
 143        public void Dispose()
 144        {
 0145            deactivatePreviewCancellationToken?.Cancel();
 0146            deactivatePreviewCancellationToken?.Dispose();
 0147            avatarAreaWarningsCounter.OnAdded -= AddedNewWarning;
 0148            avatarAreaWarningsCounter.OnRemoved -= RemovedWarning;
 0149      hudCanvasCameraModeController?.Dispose();
 0150        }
 151
 152        private string GetWarningMessage(AvatarModifierAreaID idToSet)
 153        {
 154            switch (idToSet)
 155            {
 156                case AvatarModifierAreaID.HIDE_AVATAR:
 0157                    return "\u2022  The avatars are hidden";
 158                case AvatarModifierAreaID.DISABLE_PASSPORT:
 0159                    return "\u2022  Your passport is disabled for\n    other players";
 160                default:
 0161                    throw new NotImplementedException();
 162            }
 163        }
 164
 165        private void ResetAllTriggers()
 166        {
 0167            messageAnimator.ResetTrigger(msgOutAnimationTrigger);
 0168            messageAnimator.ResetTrigger(msgInAnimationTrigger);
 0169            messageAnimator.ResetTrigger(iconInAnimationTrigger);
 0170            messageAnimator.ResetTrigger(iconOutAnimationTrigger);
 0171        }
 172
 173
 174    }
 175}