< 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:57
Uncovered lines:24
Coverable lines:81
Total lines:190
Line coverage:70.3% (57 of 81)
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%
OpenAction_OnTriggered(...)0%2100%
CloseAction_OnTriggered(...)0%2100%
OnFinishHide(...)0%110100%

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 UnityEngine;
 4using UnityEngine.UI;
 5
 6namespace DCL.SettingsPanelHUD
 7{
 8    /// <summary>
 9    /// MonoBehaviour that represents the main settings panel view and will act as a factory of SECTIONS.
 10    /// </summary>
 11    public class SettingsPanelHUDView : MonoBehaviour
 12    {
 13        [Header("General configuration")]
 14        [SerializeField] private GameObject mainWindow;
 15
 16        [Header("Sections configuration")]
 17        [SerializeField] private SettingsPanelModel settingsPanelConfig;
 18        [SerializeField] private Transform menuButtonsContainer;
 19        [SerializeField] private Transform sectionsContainer;
 20
 21        [Header("Reset All configuration")]
 22        [SerializeField] private Button resetAllButton;
 23        [SerializeField] private ShowHideAnimator resetAllConfirmation;
 24        [SerializeField] private Button resetAllOkButton;
 25        [SerializeField] private Button resetAllCancelButton;
 26        [SerializeField] private GameObject resetAllBlackOverlay;
 27
 28        [Header("Open/Close Settings")]
 29        [SerializeField] private Button closeButton;
 30        [SerializeField] private Button backgroundButton;
 31        [SerializeField] private InputAction_Trigger closeAction;
 32        [SerializeField] private InputAction_Trigger openAction;
 33
 34        [Header("Others")]
 35        [SerializeField] private Button tutorialButton;
 36        [SerializeField] private Button reportBugButton;
 37        [SerializeField] private Button helpAndSupportButton;
 38
 39        [Header("Animations")]
 40        [SerializeField] private ShowHideAnimator settingsAnimator;
 41
 042        public bool isOpen { get; private set; }
 43
 44        private const string PATH = "SettingsPanelHUD";
 45
 46        private IHUD hudController;
 47        private ISettingsPanelHUDController settingsPanelController;
 48
 49        public event System.Action OnRestartTutorial;
 50        public event System.Action OnHelpAndSupportClicked;
 51
 52        public static SettingsPanelHUDView Create()
 53        {
 254            SettingsPanelHUDView view = Instantiate(Resources.Load<GameObject>(PATH)).GetComponent<SettingsPanelHUDView>
 255            view.name = "_SettingsPanelHUD";
 256            return view;
 57        }
 58
 59        public void Initialize(IHUD hudController, ISettingsPanelHUDController settingsPanelController)
 60        {
 261            this.hudController = hudController;
 262            this.settingsPanelController = settingsPanelController;
 63
 264            openAction.OnTriggered += OpenAction_OnTriggered;
 65
 266            resetAllButton.onClick.AddListener(ShowResetAllConfirmation);
 267            resetAllCancelButton.onClick.AddListener(HideResetAllConfirmation);
 268            resetAllOkButton.onClick.AddListener(ResetAllSettings);
 69
 270            closeButton.onClick.AddListener(CloseSettingsPanel);
 271            backgroundButton.onClick.AddListener(CloseSettingsPanel);
 272            settingsAnimator.OnWillFinishHide += OnFinishHide;
 73
 274            CreateSections();
 275            isOpen = !settingsAnimator.hideOnEnable;
 276            settingsAnimator.Hide(true);
 77
 278            tutorialButton.onClick.AddListener(() => OnRestartTutorial?.Invoke());
 279        }
 80
 81        public void Initialize(IHUD hudController, ISettingsPanelHUDController settingsPanelController, SettingsSectionL
 82        {
 183            settingsPanelConfig.sections = sections;
 184            Initialize(hudController, settingsPanelController);
 185        }
 86
 87        private void OnDestroy()
 88        {
 289            openAction.OnTriggered -= OpenAction_OnTriggered;
 90
 291            if (settingsAnimator)
 292                settingsAnimator.OnWillFinishHide -= OnFinishHide;
 93
 294            tutorialButton.onClick.RemoveAllListeners();
 295            helpAndSupportButton.onClick.RemoveAllListeners();
 296        }
 97
 98        private void CreateSections()
 99        {
 12100            foreach (SettingsSectionModel sectionConfig in settingsPanelConfig.sections)
 101            {
 4102                var newMenuButton = Instantiate(sectionConfig.menuButtonPrefab, menuButtonsContainer);
 4103                var newSection = Instantiate(sectionConfig.sectionPrefab, sectionsContainer);
 4104                newSection.gameObject.name = $"Section_{sectionConfig.text}";
 4105                var newSectionController = Instantiate(sectionConfig.sectionController);
 4106                settingsPanelController.AddSection(newMenuButton, newSection, newSectionController, sectionConfig);
 107            }
 108
 2109            settingsPanelController.OpenSection(0);
 2110            settingsPanelController.MarkMenuButtonAsSelected(0);
 2111        }
 112
 113        private void ShowResetAllConfirmation()
 114        {
 0115            resetAllConfirmation.Show();
 0116            resetAllBlackOverlay.SetActive(true);
 0117        }
 118
 119        private void HideResetAllConfirmation()
 120        {
 1121            resetAllConfirmation.Hide();
 1122            resetAllBlackOverlay.SetActive(false);
 1123        }
 124
 125        private void ResetAllSettings()
 126        {
 0127            settingsPanelController.ResetAllSettings();
 0128            resetAllConfirmation.Hide();
 0129            resetAllBlackOverlay.SetActive(false);
 0130        }
 131
 0132        private void CloseSettingsPanel() { hudController.SetVisibility(false); }
 133
 134        public void SetVisibility(bool visible)
 135        {
 2136            closeAction.OnTriggered -= CloseAction_OnTriggered;
 2137            if (visible)
 138            {
 1139                closeAction.OnTriggered += CloseAction_OnTriggered;
 1140                settingsAnimator.Show();
 1141                mainWindow.SetActive(true);
 1142                HideResetAllConfirmation();
 1143                settingsPanelController.OpenSection(0);
 1144                settingsPanelController.MarkMenuButtonAsSelected(0);
 1145            }
 146            else
 147            {
 1148                settingsAnimator.Hide();
 1149                settingsPanelController.SaveSettings();
 150            }
 151
 2152            isOpen = visible;
 2153        }
 154
 155        public void SetAsFullScreenMenuMode(Transform parentTransform)
 156        {
 1157            if (parentTransform == null)
 1158                return;
 159
 0160            transform.SetParent(parentTransform);
 0161            transform.localScale = Vector3.one;
 162
 0163            RectTransform rectTransform = transform as RectTransform;
 0164            rectTransform.anchorMin = Vector2.zero;
 0165            rectTransform.anchorMax = Vector2.one;
 0166            rectTransform.pivot = new Vector2(0.5f, 0.5f);
 0167            rectTransform.localPosition = Vector2.zero;
 0168            rectTransform.offsetMax = Vector2.zero;
 0169            rectTransform.offsetMin = Vector2.zero;
 0170        }
 171
 0172        public void SetTutorialButtonEnabled(bool isEnabled) { tutorialButton.enabled = isEnabled; }
 173
 174        public void OnAddHelpAndSupportWindow()
 175        {
 1176            helpAndSupportButton.gameObject.SetActive(true);
 1177            helpAndSupportButton.onClick.AddListener(() => OnHelpAndSupportClicked?.Invoke());
 1178        }
 179
 180        private void OpenAction_OnTriggered(DCLAction_Trigger action)
 181        {
 0182            Utils.UnlockCursor();
 0183            hudController.SetVisibility(!isOpen);
 0184        }
 185
 0186        private void CloseAction_OnTriggered(DCLAction_Trigger action) { CloseSettingsPanel(); }
 187
 4188        private void OnFinishHide(ShowHideAnimator animator) { mainWindow.SetActive(false); }
 189    }
 190}