< Summary

Class:DCLFeatures.ScreencaptureCamera.UI.ScreencaptureCameraHUDView
Assembly:ScreencaptureCamera
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/ScreencaptureCamera/UI/Scripts/ScreencaptureCameraHUDView.cs
Covered lines:0
Uncovered lines:46
Coverable lines:46
Total lines:128
Line coverage:0% (0 of 46)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:12
Method coverage:0% (0 of 12)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
OnEnable()0%2100%
OnDisable()0%2100%
SetVisibility(...)0%6200%
ToggleShortcutsInfosHelpPanel()0%2100%
ScreenshotCaptureAnimation(...)0%12300%
CaptureVFXSequence(...)0%2100%
AnimateVFXImageTransition(...)0%2100%
AnimateVFXImageScale(...)0%2100%
AnimateSplash(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/ScreencaptureCamera/UI/Scripts/ScreencaptureCameraHUDView.cs

#LineLine coverage
 1using DG.Tweening;
 2using System;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6namespace DCLFeatures.ScreencaptureCamera.UI
 7{
 8    [RequireComponent(typeof(Canvas))] [DisallowMultipleComponent]
 9    public class ScreencaptureCameraHUDView : MonoBehaviour
 10    {
 11        [SerializeField] private Canvas rootCanvas;
 12        [SerializeField] private GameObject noSpaceInfo;
 13
 14        [Header("BUTTONS")]
 15        [SerializeField] private Button cameraReelButton;
 16        [SerializeField] private Button takeScreenshotButton;
 17        [SerializeField] private Button closeButton;
 18        [SerializeField] private Button shortcutsInfoButton;
 19
 20        [Header("SHORTCUTS INFO PANEL")]
 21        [SerializeField] private GameObject shortcutsInfoPanel;
 22        [SerializeField] private Image openShortcutsIcon;
 23        [SerializeField] private Image closeShortcutsIcon;
 24
 25        [Header("CAPTURE VFX")]
 26        [SerializeField] private Image whiteSplashImage;
 27        [SerializeField] private RectTransform cameraReelIcon;
 28        [SerializeField] private Image animatedImage;
 29
 30        private Sequence currentVfxSequence;
 31
 032        [field: SerializeField] public RectTransform RectTransform { get; private set; }
 33
 034        public bool IsVisible => rootCanvas.enabled;
 35
 36        public event Action CloseButtonClicked;
 37        public event Action ShortcutsInfoButtonClicked;
 38        public event Action CameraReelButtonClicked;
 39        public event Action TakeScreenshotButtonClicked;
 40
 41        private void OnEnable()
 42        {
 043            cameraReelButton.onClick.AddListener(() => CameraReelButtonClicked?.Invoke());
 044            takeScreenshotButton.onClick.AddListener(() => TakeScreenshotButtonClicked?.Invoke());
 045            shortcutsInfoButton.onClick.AddListener(() => ShortcutsInfoButtonClicked?.Invoke());
 046            closeButton.onClick.AddListener(() => CloseButtonClicked?.Invoke());
 047        }
 48
 49        private void OnDisable()
 50        {
 051            cameraReelButton.onClick.RemoveAllListeners();
 052            takeScreenshotButton.onClick.RemoveAllListeners();
 053            shortcutsInfoButton.onClick.RemoveAllListeners();
 054            closeButton.onClick.RemoveAllListeners();
 055        }
 56
 57        public virtual void SetVisibility(bool isVisible, bool hasStorageSpace)
 58        {
 059            takeScreenshotButton.interactable = hasStorageSpace;
 060            noSpaceInfo.SetActive(!hasStorageSpace);
 61
 062            if (rootCanvas.enabled != isVisible)
 063                rootCanvas.enabled = isVisible;
 064        }
 65
 66        public void ToggleShortcutsInfosHelpPanel()
 67        {
 068            bool setEnabled = shortcutsInfoPanel.activeSelf == false;
 69
 070            shortcutsInfoPanel.SetActive(setEnabled);
 71
 072            openShortcutsIcon.enabled = !setEnabled;
 073            closeShortcutsIcon.enabled = setEnabled;
 074        }
 75
 76        public void ScreenshotCaptureAnimation(Texture2D screenshotImage, float splashDuration, float afterSplashPause, 
 77        {
 078            currentVfxSequence?.Complete();
 079            currentVfxSequence?.Kill();
 80
 081            animatedImage.sprite = Sprite.Create(screenshotImage, new Rect(0, 0, screenshotImage.width, screenshotImage.
 82
 083            animatedImage.enabled = true;
 084            whiteSplashImage.enabled = true;
 85
 086            currentVfxSequence = CaptureVFXSequence(splashDuration, afterSplashPause, transitionDuration).Play();
 087        }
 88
 89        private Sequence CaptureVFXSequence(float splashDuration, float afterSplashPause, float transitionDuration)
 90        {
 091            Sequence sequence = DOTween.Sequence();
 92
 093            sequence.Append(AnimateSplash(splashDuration));
 094            sequence.AppendInterval(afterSplashPause); // Delay between splash and transition
 095            sequence.Append(AnimateVFXImageTransition(transitionDuration));
 096            sequence.Join(AnimateVFXImageScale(transitionDuration));
 097            sequence.Join(AnimateVFXImageScale(transitionDuration));
 098            sequence.OnComplete(() => animatedImage.enabled = false);
 99
 0100            return sequence;
 101        }
 102
 103        private Tween AnimateVFXImageTransition(float duration)
 104        {
 0105            Vector3 cachedPosition = animatedImage.rectTransform.position;
 106
 0107            return animatedImage.rectTransform.DOMove(cameraReelIcon.position, duration)
 108                                .SetEase(Ease.InOutQuad)
 0109                                .OnComplete(() => { animatedImage.rectTransform.position = cachedPosition; });
 110        }
 111
 112        private Tween AnimateVFXImageScale(float duration) =>
 0113            animatedImage.rectTransform.DOScale(Vector2.zero, duration)
 114                         .SetEase(Ease.InOutQuad)
 0115                         .OnComplete(() => { animatedImage.rectTransform.localScale = Vector2.one; });
 116
 117        private Tween AnimateSplash(float duration)
 118        {
 0119            return whiteSplashImage.DOFade(0f, duration)
 120                                   .SetEase(Ease.InOutQuad)
 121                                   .OnComplete(() =>
 122                                    {
 0123                                        whiteSplashImage.enabled = false;
 0124                                        whiteSplashImage.color = Color.white;
 0125                                    });
 126        }
 127    }
 128}