< 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:7
Uncovered lines:44
Coverable lines:51
Total lines:119
Line coverage:13.7% (7 of 51)
Covered branches:0
Total branches:0

Metrics

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

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;
 90015    private List<UIPageButton> buttons = new List<UIPageButton>();
 16    private int maxPages;
 17    private int currentPage;
 18
 19    private void Awake()
 20    {
 021        previousButton.onClick.AddListener(OnPreviousButtonDown);
 022        nextButton.onClick.AddListener(OnNextButtonDown);
 23
 024        gameObject.SetActive(false);
 25
 026    }
 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;
 037        }
 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)
 53    {
 668854        currentPage = 0;
 668855        this.maxPages = maxPages;
 56
 668857        if (maxPages <= 1)
 58        {
 668859            gameObject.SetActive(false);
 668860            OnValueChanged?.Invoke(0);
 49661            return;
 62        }
 63
 064        gameObject.SetActive(true);
 65
 066        EnsureButtons();
 067        UpdateButtonsStatus();
 68
 069        LayoutRebuilder.ForceRebuildLayoutImmediate(pageButtonsParent);
 070        LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
 071    }
 72    private void EnsureButtons()
 73    {
 074        if (buttons.Count != maxPages)
 75        {
 076            var diff = maxPages - buttons.Count;
 77
 078            if (diff > 0)
 79            {
 080                for (int i = 0; i < diff; i++)
 81                {
 082                    var instance = Instantiate(pageButtonPrefab, pageButtonsParent);
 083                    buttons.Add(instance);
 84                }
 85            }
 86        }
 87
 088        for (int i = 0; i < buttons.Count; i++)
 89        {
 090            UIPageButton uiPageButton = buttons[i];
 91
 092            if (i >= maxPages)
 93            {
 094                uiPageButton.gameObject.SetActive(false);
 95
 096                continue;
 97            }
 98
 099            uiPageButton.Initialize(i);
 0100            uiPageButton.gameObject.SetActive(true);
 0101            uiPageButton.OnPageClicked += OnPageClicked;
 102        }
 0103    }
 104    private void UpdateButtonsStatus()
 105    {
 0106        UpdateToggleStatus();
 107
 0108        OnValueChanged?.Invoke(currentPage);
 0109    }
 110    private void UpdateToggleStatus()
 111    {
 0112        for (int i = 0; i < buttons.Count; i++)
 113        {
 0114            var currentButton = buttons[i];
 0115            currentButton.Toggle(i == currentPage);
 116        }
 0117    }
 118
 119}