< 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:243
Line coverage:73.4% (72 of 98)
Covered branches:0
Total branches:0

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 reportBugButton;
 43        [SerializeField] private Button helpAndSupportButton;
 44
 45        [Header("Animations")]
 46        [SerializeField] private ShowHideAnimator settingsAnimator;
 47
 648        public bool isOpen { get; private set; }
 49
 50        private const string PATH = "SettingsPanelHUD";
 51        private const float WORLD_PREVIEW_MIN_WIDTH_TO_BE_SHOWED = 200f;
 52        private const float WORLD_PREVIEW_ORIGINAL_WIDTH = 400f;
 53        private const float WORLD_PREVIEW_ORIGINAL_HEIGHT = 250f;
 54
 55        private IHUD hudController;
 56        private ISettingsPanelHUDController settingsPanelController;
 57
 58        public event System.Action OnRestartTutorial;
 59        public event System.Action OnHelpAndSupportClicked;
 60
 61        public static SettingsPanelHUDView Create()
 62        {
 263            SettingsPanelHUDView view = Instantiate(Resources.Load<GameObject>(PATH)).GetComponent<SettingsPanelHUDView>
 264            view.name = "_SettingsPanelHUD";
 265            return view;
 66        }
 67
 68        public void Initialize(IHUD hudController, ISettingsPanelHUDController settingsPanelController)
 69        {
 270            this.hudController = hudController;
 271            this.settingsPanelController = settingsPanelController;
 72
 273            openAction.OnTriggered += OpenAction_OnTriggered;
 274            closeResetAllAction.OnTriggered += CloseResetAllAction_OnTriggered;
 75
 276            resetAllButton.onClick.AddListener(ShowResetAllConfirmation);
 277            resetAllCancelButton.onClick.AddListener(HideResetAllConfirmation);
 278            resetAllOkButton.onClick.AddListener(ResetAllSettings);
 79
 280            closeButton.onClick.AddListener(CloseSettingsPanel);
 281            backgroundButton.onClick.AddListener(CloseSettingsPanel);
 282            settingsAnimator.OnWillFinishHide += OnFinishHide;
 83
 284            CreateSections();
 285            isOpen = !settingsAnimator.hideOnEnable;
 286            settingsAnimator.Hide(true);
 87
 288            tutorialButton.onClick.AddListener(() => OnRestartTutorial?.Invoke());
 89
 290            DataStore.i.screen.size.OnChange += ScreenSizeChanged;
 291            ScreenSizeChanged(DataStore.i.screen.size.Get(), Vector2Int.zero);
 92
 93            //WorldPreviewWindow is not being used at the moment. If we decide to reuse it, remove this activation
 294            worldPreviewWindowTransform.gameObject.SetActive(false);
 295        }
 96
 97        public void Initialize(IHUD hudController, ISettingsPanelHUDController settingsPanelController, SettingsSectionL
 98        {
 199            settingsPanelConfig.sections = sections;
 1100            Initialize(hudController, settingsPanelController);
 1101        }
 102
 103        private void OnDestroy()
 104        {
 2105            openAction.OnTriggered -= OpenAction_OnTriggered;
 2106            closeResetAllAction.OnTriggered -= CloseResetAllAction_OnTriggered;
 107
 2108            if (settingsAnimator)
 2109                settingsAnimator.OnWillFinishHide -= OnFinishHide;
 110
 2111            tutorialButton.onClick.RemoveAllListeners();
 2112            helpAndSupportButton.onClick.RemoveAllListeners();
 113
 2114            DataStore.i.screen.size.OnChange -= ScreenSizeChanged;
 2115        }
 116
 117        private void CreateSections()
 118        {
 12119            foreach (SettingsSectionModel sectionConfig in settingsPanelConfig.sections)
 120            {
 4121                var newMenuButton = Instantiate(sectionConfig.menuButtonPrefab, menuButtonsContainer);
 4122                var newSection = Instantiate(sectionConfig.sectionPrefab, sectionsContainer);
 4123                newSection.gameObject.name = $"Section_{sectionConfig.text}";
 4124                var newSectionController = Instantiate(sectionConfig.sectionController);
 4125                settingsPanelController.AddSection(newMenuButton, newSection, newSectionController, sectionConfig);
 126            }
 127
 2128            settingsPanelController.OpenSection(0);
 2129            settingsPanelController.MarkMenuButtonAsSelected(0);
 2130        }
 131
 132        private void ShowResetAllConfirmation()
 133        {
 0134            DataStore.i.exploreV2.isSomeModalOpen.Set(true);
 0135            resetAllConfirmation.Show();
 0136            resetAllBlackOverlay.SetActive(true);
 0137        }
 138
 139        private void HideResetAllConfirmation()
 140        {
 1141            DataStore.i.exploreV2.isSomeModalOpen.Set(false);
 1142            resetAllConfirmation.Hide();
 1143            resetAllBlackOverlay.SetActive(false);
 1144        }
 145
 146        private void ResetAllSettings()
 147        {
 0148            DataStore.i.exploreV2.isSomeModalOpen.Set(false);
 0149            settingsPanelController.ResetAllSettings();
 0150            resetAllConfirmation.Hide();
 0151            resetAllBlackOverlay.SetActive(false);
 0152        }
 153
 0154        private void CloseSettingsPanel() { hudController.SetVisibility(false); }
 155
 156        public void SetVisibility(bool visible)
 157        {
 2158            if (visible)
 159            {
 1160                settingsAnimator.Show();
 1161                mainWindow.SetActive(true);
 1162                HideResetAllConfirmation();
 1163                settingsPanelController.OpenSection(0);
 1164                settingsPanelController.MarkMenuButtonAsSelected(0);
 165            }
 166            else
 167            {
 1168                settingsAnimator.Hide();
 1169                settingsPanelController.SaveSettings();
 1170                SetWorldPreviewActive(false);
 171            }
 172
 2173            isOpen = visible;
 2174        }
 175
 176        public void SetAsFullScreenMenuMode(Transform parentTransform)
 177        {
 1178            if (parentTransform == null)
 1179                return;
 180
 0181            transform.SetParent(parentTransform);
 0182            transform.localScale = Vector3.one;
 183
 0184            RectTransform rectTransform = transform as RectTransform;
 0185            rectTransform.anchorMin = Vector2.zero;
 0186            rectTransform.anchorMax = Vector2.one;
 0187            rectTransform.pivot = new Vector2(0.5f, 0.5f);
 0188            rectTransform.localPosition = Vector2.zero;
 0189            rectTransform.offsetMax = Vector2.zero;
 0190            rectTransform.offsetMin = Vector2.zero;
 0191        }
 192
 0193        public void SetTutorialButtonEnabled(bool isEnabled) { tutorialButton.enabled = isEnabled; }
 194
 195        public void OnAddHelpAndSupportWindow()
 196        {
 1197            helpAndSupportButton.gameObject.SetActive(true);
 1198            helpAndSupportButton.onClick.AddListener(() => OnHelpAndSupportClicked?.Invoke());
 1199        }
 200
 201        public void SetWorldPreviewActive(bool isActive)
 202        {
 203            //WorldPreviewWindow is not being used at the moment. Leaving this code here
 204            //in case we decide to reuse it someday.
 3205            return;
 206            worldPreviewWindowTransform.gameObject.SetActive(isActive);
 207            DataStore.i.camera.outputTexture.Set(isActive ? worldPreviewRawImage.texture as RenderTexture : null);
 208        }
 209
 210        private void OpenAction_OnTriggered(DCLAction_Trigger action)
 211        {
 0212            Utils.UnlockCursor();
 0213            hudController.SetVisibility(!isOpen);
 0214        }
 215
 216        private void CloseResetAllAction_OnTriggered(DCLAction_Trigger action)
 217        {
 0218            HideResetAllConfirmation();
 0219        }
 220
 2221        private void OnFinishHide(ShowHideAnimator animator) { mainWindow.SetActive(false); }
 222
 223        private void ScreenSizeChanged(Vector2Int current, Vector2Int previous)
 224        {
 2225            StartCoroutine(RefreshWorldPreviewSize());
 2226        }
 227
 228        private IEnumerator RefreshWorldPreviewSize()
 229        {
 2230            yield return null;
 231
 2232            float newHeight = Mathf.Clamp(worldPreviewWindowTransform.rect.size.x * WORLD_PREVIEW_ORIGINAL_HEIGHT / WORL
 233
 2234            worldPreviewWindowTransform.SetSizeWithCurrentAnchors(
 235                RectTransform.Axis.Vertical,
 236                newHeight);
 237
 2238            worldPreviewCanvasGroup.alpha = worldPreviewWindowTransform.rect.size.x >= WORLD_PREVIEW_MIN_WIDTH_TO_BE_SHO
 239
 2240            Utils.ForceRebuildLayoutImmediate(sectionsContainer as RectTransform);
 2241        }
 242    }
 243}