Advertisement
BobbyPinkyOfficial

RPJIV's Better Unity Sliders

Aug 29th, 2023 (edited)
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.69 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5.  
  6. //Script created and wrote by Robert James P IV, Free to use if you wish, No credit needed have a nice day.
  7. public class Display_Slider : MonoBehaviour
  8. {
  9.     //Version 0.1 Completed nothing else to add to sliders as of version 0.1
  10.     //DO NOT EDIT unless more mechanics where added to sliders.
  11.  
  12.     #region ObjectReference
  13.     private GameObject _sliderObject;
  14.     private Slider _slider;
  15.     [SerializeField]
  16.     [Tooltip("The slider values fill image")]
  17.     private Image _sliderFill;
  18.     #endregion
  19.  
  20.     #region Thresholds
  21.     [SerializeField]
  22.     [Tooltip("The percentage of the max slider value you want to be considered positive value, i.e 0.00 - 1.00")]
  23.     private float _sliderPositiveThresholdMutliplier;
  24.     [SerializeField]
  25.     [Tooltip("The percentage of the max slider value you want to be considered negative value, i.e 0.00 - 1.00")]
  26.     private float _sliderNegativeThreshholdMultiplier;
  27.     private float _sliderPositiveThreshold;
  28.     private float _sliderNegativeThreshold;
  29.     #endregion
  30.  
  31.     #region Colour
  32.     [SerializeField]
  33.     [Tooltip("The positive colour to display when slider current value > positive threshold")]
  34.     private Color _sliderPositiveColor;
  35.     [SerializeField]
  36.     [Tooltip("The neutral colour to display when slider current value < positive threshold but > negative threshold")]
  37.     private Color _sliderNeutralColor;
  38.     [SerializeField]
  39.     [Tooltip("The negative colour to display when slider current value < positive threshold && negative threshold")]
  40.     private Color _sliderNegativeColor;
  41.     #endregion
  42.  
  43.     #region Animation
  44.     [SerializeField]
  45.     [Tooltip("It is the anim time controlled by a Ienumarator wait for seconds")]
  46.     private float _sliderAnimTime;
  47.  
  48.     #endregion
  49.  
  50.     #region Testing_Vars
  51.     [SerializeField]
  52.     [Tooltip("Tests The Slider the script is attached too")]
  53.     private bool _testSlider;
  54.     [SerializeField]
  55.     [Tooltip("Tests The Slider max value")]
  56.     private int _testSliderMax;
  57.     [SerializeField]
  58.     [Tooltip("Tests The Slider current value")]
  59.     private int _testSliderCurrent;
  60.     [SerializeField]
  61.     [Tooltip("Tests The animation of the slider value")]
  62.     private bool _testSliderAnimated;
  63.     [SerializeField]
  64.     [Tooltip("Tests The increase or decrease to value of slider")]
  65.     private bool _testSliderIncrease;
  66.     [SerializeField]
  67.     [Tooltip("Give an amount of ints to test on the sliders functional inputs")]
  68.     private int _testSliderAmount;
  69.     #endregion
  70.  
  71.     #region Public_Getters
  72.  
  73.     public bool Slider_CheckIsActive()
  74.     {
  75.         if (_sliderObject.activeInHierarchy) { return true; } else if (!_sliderObject.activeInHierarchy) { return false; } else { return false; }
  76.     }
  77.  
  78.     #endregion
  79.  
  80.     #region Functions
  81.  
  82.     private void Awake()
  83.     {
  84.         if (_slider == null) { _slider = GetComponent<Slider>(); }
  85.         if (_sliderObject == null) { _sliderObject = gameObject; }
  86.         _sliderPositiveColor = Color.green;
  87.         _sliderNegativeColor = Color.red;
  88.         _sliderNeutralColor = Color.yellow;
  89.         _slider.interactable = false;
  90.     }
  91.  
  92.     private void Start()
  93.     {
  94.         //Run a test no anim and anim
  95.         if (_testSlider)
  96.         {
  97.             Slider_SetSlider(0, _testSliderMax, _testSliderCurrent);
  98.             Slider_ControlSlider(_testSliderAnimated, _testSliderIncrease, _testSliderAmount);
  99.         }
  100.     }
  101.  
  102.     private void Update()
  103.     {
  104.         if (_slider.value >= _sliderPositiveThreshold)
  105.         {
  106.             _sliderFill.color = _sliderPositiveColor;
  107.         } else if (_slider.value < _sliderPositiveThreshold && _slider.value > _sliderNegativeThreshold)
  108.         {
  109.             _sliderFill.color = _sliderNeutralColor;
  110.         } else { _sliderFill.color = _sliderNegativeColor; _sliderFill.color = new Color(_sliderFill.color.r, _sliderFill.color.g, _sliderFill.color.b, _slider.value); }
  111.     }
  112.  
  113.     public void Slider_SetSlider(int min, int max, int current)
  114.     {
  115.         //This function is called Externally by a value control script i.e Health, Damage controllers
  116.         _slider.minValue = min;
  117.         _slider.maxValue = max;
  118.         _slider.value = current;
  119.         _sliderPositiveThreshold = max * _sliderPositiveThresholdMutliplier;
  120.         _sliderNegativeThreshold = max * _sliderNegativeThreshholdMultiplier;
  121.     }
  122.  
  123.     public void Slider_ControlSlider(bool animated, bool increase, int amount)
  124.     {
  125.         if (!animated)
  126.         {
  127.             if (increase)
  128.             {
  129.                 _slider.value += amount;
  130.             } else if (!increase)
  131.             {
  132.                 _slider.value -= amount;
  133.             }
  134.         } else if (animated)
  135.         {
  136.             StartCoroutine(Slider_Anim(increase, amount));
  137.         }
  138.     }
  139.  
  140.     public void Slider_DisplaySlider()
  141.     {
  142.         if (!_sliderObject.activeInHierarchy) { _sliderObject.SetActive(true); } else if (_sliderObject.activeInHierarchy) { _sliderObject.SetActive(false); }
  143.     }
  144.  
  145.     #endregion
  146.  
  147.     #region SliderValues_Ienums
  148.  
  149.     private IEnumerator Slider_Anim(bool increase, int amount)
  150.     {
  151.         int index = amount;
  152.  
  153.         //If your wondering why there is many do loops it's for my own detection for future versions of my game
  154.        //it's not a mistake
  155.  
  156.         if (!increase)
  157.         {
  158.             do
  159.             {
  160.                 _slider.value--;
  161.                 index--;
  162.                 yield return new WaitForSeconds(_sliderAnimTime/20);
  163.             } while (index > 100);
  164.  
  165.             do
  166.             {
  167.                 _slider.value--;
  168.                 index--;
  169.                 yield return new WaitForSeconds(_sliderAnimTime / 20);
  170.             } while (index > 10 && index < 100);
  171.  
  172.             do
  173.             {
  174.                 _slider.value--;
  175.                 index--;
  176.                 yield return new WaitForSeconds(_sliderAnimTime/20);
  177.             } while (index < 10 && index > 0);
  178.  
  179.         } else if (increase)
  180.         {
  181.             do
  182.             {
  183.                 _slider.value++;
  184.                 index--;
  185.                 yield return new WaitForSeconds(_sliderAnimTime / 20);
  186.             } while (index > 100);
  187.  
  188.             do
  189.             {
  190.                 _slider.value++;
  191.                 index--;
  192.                 yield return new WaitForSeconds(_sliderAnimTime / 20);
  193.             } while (index > 10 && index < 100);
  194.  
  195.             do
  196.             {
  197.                 _slider.value++;
  198.                 index--;
  199.                 yield return new WaitForSeconds(_sliderAnimTime/20);
  200.             } while (index < 10 && index > 0);
  201.         }
  202.         yield break;
  203.     }
  204.     #endregion
  205.  
  206. }
  207.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement