< Summary

Class:UIPageSelector
Assembly:AvatarEditorHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarEditorHUD/Scripts/UIPageSelector.cs
Covered lines:13
Uncovered lines:40
Coverable lines:53
Total lines:126
Line coverage:24.5% (13 of 53)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
UIPageSelector()0%110100%
Awake()0%110100%
OnNextButtonDown()0%2100%
OnPreviousButtonDown()0%6200%
OnPageClicked(...)0%2100%
Setup(...)0%6.975057.14%
EnsureButtons()0%42600%
UpdateButtonsStatus()0%6200%
UpdateToggleStatus()0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarEditorHUD/Scripts/UIPageSelector.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6public class UIPageSelector : MonoBehaviour
 7{
 8    public event Action<int> OnValueChanged;
 9
 10    [SerializeField] private Button previousButton;
 11    [SerializeField] private Button nextButton;
 12    [SerializeField] private UIPageButton pageButtonPrefab;
 13    [SerializeField] private RectTransform pageButtonsParent;
 14    [SerializeField] private RectTransform rectTransform;
 90215    private List<UIPageButton> buttons = new List<UIPageButton>();
 16    private int maxPages;
 17    private int currentPage;
 18
 19    private void Awake()
 20    {
 4721        previousButton.onClick.AddListener(OnPreviousButtonDown);
 4722        nextButton.onClick.AddListener(OnNextButtonDown);
 23
 4724        gameObject.SetActive(false);
 25
 4726    }
 27    private void OnNextButtonDown()
 28    {
 029        currentPage = (currentPage + 1 ) % maxPages;
 030        UpdateButtonsStatus();
 031    }
 32    private void OnPreviousButtonDown()
 33    {
 034        if (currentPage - 1 < 0)
 35        {
 036            currentPage = maxPages - 1;
 37        }
 38        else
 39        {
 040            currentPage = (currentPage - 1 ) % maxPages;
 41        }
 42
 043        UpdateButtonsStatus();
 044    }
 45
 46    private void OnPageClicked(int pageNumber)
 47    {
 048        currentPage = pageNumber;
 049        UpdateButtonsStatus();
 050    }
 51
 52    public void Setup(int maxPages, bool forceRebuild = false)
 53    {
 593254        if (maxPages == this.maxPages && !forceRebuild)
 55        {
 359256            return;
 57        }
 58
 234059        this.maxPages = maxPages;
 60
 234061        currentPage = Mathf.Clamp(currentPage, 0, maxPages-1);
 62
 234063        if (maxPages <= 1)
 64        {
 234065            gameObject.SetActive(false);
 234066            OnValueChanged?.Invoke(0);
 18367            return;
 68        }
 69
 070        gameObject.SetActive(true);
 71
 072        EnsureButtons();
 073        UpdateButtonsStatus();
 74
 075        LayoutRebuilder.ForceRebuildLayoutImmediate(pageButtonsParent);
 076        LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
 077    }
 78    private void EnsureButtons()
 79    {
 080        if (buttons.Count != maxPages)
 81        {
 082            var diff = maxPages - buttons.Count;
 83
 084            if (diff > 0)
 85            {
 086                for (int i = 0; i < diff; i++)
 87                {
 088                    var instance = Instantiate(pageButtonPrefab, pageButtonsParent);
 089                    buttons.Add(instance);
 90                }
 91            }
 92        }
 93
 094        for (int i = 0; i < buttons.Count; i++)
 95        {
 096            UIPageButton uiPageButton = buttons[i];
 97
 098            if (i >= maxPages)
 99            {
 0100                uiPageButton.gameObject.SetActive(false);
 101
 0102                continue;
 103            }
 104
 0105            uiPageButton.Initialize(i);
 0106            uiPageButton.gameObject.SetActive(true);
 0107            uiPageButton.OnPageClicked += OnPageClicked;
 108        }
 0109    }
 110    private void UpdateButtonsStatus()
 111    {
 0112        UpdateToggleStatus();
 113
 0114        OnValueChanged?.Invoke(currentPage);
 0115    }
 116    private void UpdateToggleStatus()
 117    {
 0118        for (int i = 0; i < buttons.Count; i++)
 119        {
 0120            var currentButton = buttons[i];
 0121            if (currentButton.isActiveAndEnabled)
 0122                currentButton.Toggle(i == currentPage);
 123        }
 0124    }
 125
 126}