< Summary

Class:DynamicScrollSensitivity
Assembly:UIHelpers
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Helpers/UIHelpers/DynamicScrollSensitivity.cs
Covered lines:0
Uncovered lines:21
Coverable lines:21
Total lines:61
Line coverage:0% (0 of 21)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:6
Method coverage:0% (0 of 6)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
DynamicScrollSensitivity()0%2100%
OnEnable()0%6200%
OnDestroy()0%2100%
RecalculateSensitivity()0%2100%
RecalculateCoroutine()0%20400%
KillCurrentCoroutine()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Helpers/UIHelpers/DynamicScrollSensitivity.cs

#LineLine coverage
 1using System.Collections;
 2using UnityEngine;
 3using UnityEngine.UI;
 4
 5/// <summary>
 6/// Let to set a dynamic sensitivity value depending on the height of the content container.
 7/// Call to RecalculateSensitivity() function to calculate and apply the new sensitivity value.
 8/// </summary>
 9public class DynamicScrollSensitivity : MonoBehaviour
 10{
 11    [Tooltip("Scroll Rect component that will be modified.")]
 12    public ScrollRect mainScrollRect;
 13    [Tooltip("Min value for the calculated scroll sensitivity.")]
 014    public float minSensitivity = 5f;
 15    [Tooltip("Max value for the calculated scroll sensitivity.")]
 016    public float maxSensitivity = 50f;
 17    [Tooltip("Multiplier applied to the sensitivity value (sensitivityMultiplier = 1 for not applying).")]
 018    public float sensitivityMultiplier = 0.5f;
 19    [Tooltip("True to recalculate each time the game object is enabled.")]
 020    public bool recalculateOnEnable = true;
 21
 22    private Coroutine recalculateCoroutine = null;
 23
 24    private void OnEnable()
 25    {
 026        if (recalculateOnEnable)
 027            RecalculateSensitivity();
 028    }
 29
 030    private void OnDestroy() { KillCurrentCoroutine(); }
 31
 32    /// <summary>
 33    /// Recalculate the scroll sensitivity value depending on the current height of the content container.
 34    /// </summary>
 35    public void RecalculateSensitivity()
 36    {
 037        KillCurrentCoroutine();
 038        recalculateCoroutine = CoroutineStarter.Start(RecalculateCoroutine());
 039    }
 40
 41    private IEnumerator RecalculateCoroutine()
 42    {
 43        // We need to wait for a frame for having available the correct height of the contentContainer after the OnEnabl
 044        yield return null;
 45
 046        if (mainScrollRect.content != null)
 47        {
 048            float newSensitivity = (mainScrollRect.content.rect.height * minSensitivity / mainScrollRect.viewport.rect.h
 049            mainScrollRect.scrollSensitivity = Mathf.Clamp(newSensitivity, minSensitivity, maxSensitivity);
 50        }
 051    }
 52
 53    private void KillCurrentCoroutine()
 54    {
 055        if (recalculateCoroutine == null)
 056            return;
 57
 058        CoroutineStarter.Stop(recalculateCoroutine);
 059        recalculateCoroutine = null;
 060    }
 61}