< Summary

Class:DCL.SettingsPanelHUD.SettingsPanelHUDView
Assembly:SettingsPanelHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/SettingsPanelHUD/Scripts/SettingsPanelHUDView.cs
Covered lines:72
Uncovered lines:26
Coverable lines:98
Total lines:242
Line coverage:73.4% (72 of 98)
Covered branches:0
Total branches:0
Covered methods:15
Total methods:21
Method coverage:71.4% (15 of 21)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Create()0%110100%
Initialize(...)0%110100%
Initialize(...)0%110100%
OnDestroy()0%220100%
CreateSections()0%330100%
ShowResetAllConfirmation()0%2100%
HideResetAllConfirmation()0%110100%
ResetAllSettings()0%2100%
CloseSettingsPanel()0%2100%
SetVisibility(...)0%220100%
SetAsFullScreenMenuMode(...)0%4.312016.67%
SetTutorialButtonEnabled(...)0%2100%
OnAddHelpAndSupportWindow()0%110100%
SetWorldPreviewActive(...)0%110100%
OpenAction_OnTriggered(...)0%2100%
CloseResetAllAction_OnTriggered(...)0%2100%
OnFinishHide(...)0%110100%
ScreenSizeChanged(...)0%110100%
RefreshWorldPreviewSize()0%550100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/SettingsPanelHUD/Scripts/SettingsPanelHUDView.cs

#LineLine coverage
 1using DCL.Helpers;
 2using DCL.SettingsPanelHUD.Sections;
 3using System.Collections;
 4using UnityEngine;
 5using UnityEngine.UI;
 6
 7namespace DCL.SettingsPanelHUD
 8{
 9    /// <summary>
 10    /// MonoBehaviour that represents the main settings panel view and will act as a factory of SECTIONS.
 11    /// </summary>
 12    public class SettingsPanelHUDView : MonoBehaviour
 13    {
 14        [Header("General configuration")]
 15        [SerializeField] private GameObject mainWindow;
 16
 17        [Header("Sections configuration")]
 18        [SerializeField] private SettingsPanelModel settingsPanelConfig;
 19        [SerializeField] private Transform menuButtonsContainer;
 20        [SerializeField] private Transform sectionsContainer;
 21
 22        [Header("Reset All configuration")]
 23        [SerializeField] private Button resetAllButton;
 24        [SerializeField] private ShowHideAnimator resetAllConfirmation;
 25        [SerializeField] private Button resetAllOkButton;
 26        [SerializeField] private Button resetAllCancelButton;
 27        [SerializeField] private GameObject resetAllBlackOverlay;
 28        [SerializeField] internal InputAction_Trigger closeResetAllAction;
 29
 30        [Header("Open/Close Settings")]
 31        [SerializeField] private Button closeButton;
 32        [SerializeField] private Button backgroundButton;
 33        [SerializeField] private InputAction_Trigger openAction;
 34
 35        [Header("World Preview Window")]
 36        [SerializeField] private RectTransform worldPreviewWindowTransform;
 37        [SerializeField] private CanvasGroup worldPreviewCanvasGroup;
 38        [SerializeField] private RawImage worldPreviewRawImage;
 39
 40        [Header("Others")]
 41        [SerializeField] private Button tutorialButton;
 42        [SerializeField] private Button helpAndSupportButton;
 43
 44        [Header("Animations")]
 45        [SerializeField] private ShowHideAnimator settingsAnimator;
 46
 647        public bool isOpen { get; private set; }
 48
 49        private const string PATH = "SettingsPanelHUD";
 50        private const float WORLD_PREVIEW_MIN_WIDTH_TO_BE_SHOWED = 200f;
 51        private const float WORLD_PREVIEW_ORIGINAL_WIDTH = 400f;
 52        private const float WORLD_PREVIEW_ORIGINAL_HEIGHT = 250f;
 53
 54        private IHUD hudController;
 55        private ISettingsPanelHUDController settingsPanelController;
 56
 57        public event System.Action OnRestartTutorial;
 58        public event System.Action OnHelpAndSupportClicked;
 59
 60        public static SettingsPanelHUDView Create()
 61        {
 262            SettingsPanelHUDView view = Instantiate(Resources.Load<GameObject>(PATH)).GetComponent<SettingsPanelHUDView>
 263            view.name = "_SettingsPanelHUD";
 264            return view;
 65        }
 66
 67        public void Initialize(IHUD hudController, ISettingsPanelHUDController settingsPanelController)
 68        {
 269            this.hudController = hudController;
 270            this.settingsPanelController = settingsPanelController;
 71
 272            openAction.OnTriggered += OpenAction_OnTriggered;
 273            closeResetAllAction.OnTriggered += CloseResetAllAction_OnTriggered;
 74
 275            resetAllButton.onClick.AddListener(ShowResetAllConfirmation);
 276            resetAllCancelButton.onClick.AddListener(HideResetAllConfirmation);
 277            resetAllOkButton.onClick.AddListener(ResetAllSettings);
 78
 279            closeButton.onClick.AddListener(CloseSettingsPanel);
 280            backgroundButton.onClick.AddListener(CloseSettingsPanel);
 281            settingsAnimator.OnWillFinishHide += OnFinishHide;
 82
 283            CreateSections();
 284            isOpen = !settingsAnimator.hideOnEnable;
 285            settingsAnimator.Hide(true);
 86
 287            tutorialButton.onClick.AddListener(() => OnRestartTutorial?.Invoke());
 88
 289            DataStore.i.screen.size.OnChange += ScreenSizeChanged;
 290            ScreenSizeChanged(DataStore.i.screen.size.Get(), Vector2Int.zero);
 91
 92            //WorldPreviewWindow is not being used at the moment. If we decide to reuse it, remove this activation
 293            worldPreviewWindowTransform.gameObject.SetActive(false);
 294        }
 95
 96        public void Initialize(IHUD hudController, ISettingsPanelHUDController settingsPanelController, SettingsSectionL
 97        {
 198            settingsPanelConfig.sections = sections;
 199            Initialize(hudController, settingsPanelController);
 1100        }
 101
 102        private void OnDestroy()
 103        {
 2104            openAction.OnTriggered -= OpenAction_OnTriggered;
 2105            closeResetAllAction.OnTriggered -= CloseResetAllAction_OnTriggered;
 106
 2107            if (settingsAnimator)
 2108                settingsAnimator.OnWillFinishHide -= OnFinishHide;
 109
 2110            tutorialButton.onClick.RemoveAllListeners();
 2111            helpAndSupportButton.onClick.RemoveAllListeners();
 112
 2113            DataStore.i.screen.size.OnChange -= ScreenSizeChanged;
 2114        }
 115
 116        private void CreateSections()
 117        {
 12118            foreach (SettingsSectionModel sectionConfig in settingsPanelConfig.sections)
 119            {
 4120                var newMenuButton = Instantiate(sectionConfig.menuButtonPrefab, menuButtonsContainer);
 4121                var newSection = Instantiate(sectionConfig.sectionPrefab, sectionsContainer);
 4122                newSection.gameObject.name = $"Section_{sectionConfig.text}";
 4123                var newSectionController = Instantiate(sectionConfig.sectionController);
 4124                settingsPanelController.AddSection(newMenuButton, newSection, newSectionController, sectionConfig);
 125            }
 126
 2127            settingsPanelController.OpenSection(0);
 2128            settingsPanelController.MarkMenuButtonAsSelected(0);
 2129        }
 130
 131        private void ShowResetAllConfirmation()
 132        {
 0133            DataStore.i.exploreV2.isSomeModalOpen.Set(true);
 0134            resetAllConfirmation.Show();
 0135            resetAllBlackOverlay.SetActive(true);
 0136        }
 137
 138        private void HideResetAllConfirmation()
 139        {
 1140            DataStore.i.exploreV2.isSomeModalOpen.Set(false);
 1141            resetAllConfirmation.Hide();
 1142            resetAllBlackOverlay.SetActive(false);
 1143        }
 144
 145        private void ResetAllSettings()
 146        {
 0147            DataStore.i.exploreV2.isSomeModalOpen.Set(false);
 0148            settingsPanelController.ResetAllSettings();
 0149            resetAllConfirmation.Hide();
 0150            resetAllBlackOverlay.SetActive(false);
 0151        }
 152
 0153        private void CloseSettingsPanel() { hudController.SetVisibility(false); }
 154
 155        public void SetVisibility(bool visible)
 156        {
 2157            if (visible)
 158            {
 1159                settingsAnimator.Show();
 1160                mainWindow.SetActive(true);
 1161                HideResetAllConfirmation();
 1162                settingsPanelController.OpenSection(0);
 1163                settingsPanelController.MarkMenuButtonAsSelected(0);
 164            }
 165            else
 166            {
 1167                settingsAnimator.Hide();
 1168                settingsPanelController.SaveSettings();
 1169                SetWorldPreviewActive(false);
 170            }
 171
 2172            isOpen = visible;
 2173        }
 174
 175        public void SetAsFullScreenMenuMode(Transform parentTransform)
 176        {
 1177            if (parentTransform == null)
 1178                return;
 179
 0180            transform.SetParent(parentTransform);
 0181            transform.localScale = Vector3.one;
 182
 0183            RectTransform rectTransform = transform as RectTransform;
 0184            rectTransform.anchorMin = Vector2.zero;
 0185            rectTransform.anchorMax = Vector2.one;
 0186            rectTransform.pivot = new Vector2(0.5f, 0.5f);
 0187            rectTransform.localPosition = Vector2.zero;
 0188            rectTransform.offsetMax = Vector2.zero;
 0189            rectTransform.offsetMin = Vector2.zero;
 0190        }
 191
 0192        public void SetTutorialButtonEnabled(bool isEnabled) { tutorialButton.enabled = isEnabled; }
 193
 194        public void OnAddHelpAndSupportWindow()
 195        {
 1196            helpAndSupportButton.gameObject.SetActive(true);
 1197            helpAndSupportButton.onClick.AddListener(() => OnHelpAndSupportClicked?.Invoke());
 1198        }
 199
 200        public void SetWorldPreviewActive(bool isActive)
 201        {
 202            //WorldPreviewWindow is not being used at the moment. Leaving this code here
 203            //in case we decide to reuse it someday.
 3204            return;
 205            worldPreviewWindowTransform.gameObject.SetActive(isActive);
 206            DataStore.i.camera.outputTexture.Set(isActive ? worldPreviewRawImage.texture as RenderTexture : null);
 207        }
 208
 209        private void OpenAction_OnTriggered(DCLAction_Trigger action)
 210        {
 0211            Utils.UnlockCursor();
 0212            hudController.SetVisibility(!isOpen);
 0213        }
 214
 215        private void CloseResetAllAction_OnTriggered(DCLAction_Trigger action)
 216        {
 0217            HideResetAllConfirmation();
 0218        }
 219
 2220        private void OnFinishHide(ShowHideAnimator animator) { mainWindow.SetActive(false); }
 221
 222        private void ScreenSizeChanged(Vector2Int current, Vector2Int previous)
 223        {
 2224            StartCoroutine(RefreshWorldPreviewSize());
 2225        }
 226
 227        private IEnumerator RefreshWorldPreviewSize()
 228        {
 2229            yield return null;
 230
 2231            float newHeight = Mathf.Clamp(worldPreviewWindowTransform.rect.size.x * WORLD_PREVIEW_ORIGINAL_HEIGHT / WORL
 232
 2233            worldPreviewWindowTransform.SetSizeWithCurrentAnchors(
 234                RectTransform.Axis.Vertical,
 235                newHeight);
 236
 2237            worldPreviewCanvasGroup.alpha = worldPreviewWindowTransform.rect.size.x >= WORLD_PREVIEW_MIN_WIDTH_TO_BE_SHO
 238
 2239            Utils.ForceRebuildLayoutImmediate(sectionsContainer as RectTransform);
 2240        }
 241    }
 242}