Advertisement
EagleOwle

UI_EnergyConfig

Jan 23rd, 2017
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.07 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine.UI;
  5.  
  6. public class UI_EnergyConfig : MonoBehaviour
  7. {
  8.     //Ссылка на экземпляр класса ui обьекта(со ссылкой на экземпляр класса модуля(который висит на персонаже))
  9.     public UI_ModulEnergy currentUIModul;
  10.     //Ссылка на экземпляр класса (который висит на персонаже) модуль реактор
  11.     public ModulReactor modulReactor;
  12.     //Остаток энергии реактора
  13.     public Text freeEnergyValueText;
  14.     //Текущее значение энергии реактора
  15.     public Text energyValueText;
  16.     //Максимально возможное значение энергии для модуля
  17.     private Text changeEnergyMaxValueText;
  18.     //Текущее значение энергии модуля
  19.     private Text changeEnergyValueText;
  20.     //Описание модуля
  21.     private Text aboutModulText;
  22.     //
  23.     private Text usedEnergyText;
  24.     private Slider changeEnergySlider;
  25.     //Список модулей, в которых можно менять значение энергии
  26.     private List<UI_ModulEnergy> ui_ModulEnergyList = new List<UI_ModulEnergy>();
  27.     //Массив всех модулей в ui меню
  28.     public UI_ModulEnergy[] ui_ModulEnergyArray;
  29.  
  30.     void OnEnable()
  31.     {
  32.         if (changeEnergySlider == null) { changeEnergySlider = GetComponentInChildren<Slider>(); }
  33.            
  34.         FindModulReactor();//Находим модуль реатор на персонаже
  35.         EnableAllUI_ModulEnergy();//Включаем ui обьекты в массиве ui_ModulEnergyArray
  36.  
  37.         EnableSlider();//Включаем обьект слайдер, что бы получить ссылку на его дочерние обьекты
  38.        
  39.         //Находим обьекты с текстом
  40.         freeEnergyValueText = transform.FindChild("FreeEnergy").GetComponent<Text>();
  41.         energyValueText = transform.FindChild("EnergyValue").GetComponent<Text>();
  42.         aboutModulText = transform.FindChild("AboutModulText").GetComponent<Text>();
  43.         usedEnergyText = transform.FindChild("UsedEnergy").GetComponent<Text>();
  44.         //Находим обьекты с текстом путем перебора всех дочерних обьектов от this.gameObject
  45.         changeEnergyMaxValueText = GameController.Instance.FindTransform(this.gameObject, "MaxValueEnergy").GetComponent<Text>();
  46.         changeEnergyValueText = GameController.Instance.FindTransform(this.gameObject, "CurrentValueEnergy").GetComponent<Text>();
  47.  
  48.         DisableSlider();//Отключаем слайдер
  49.         ui_ModulEnergyList.Clear();//Очищаем список
  50.        
  51.     }
  52.  
  53.     //Метод выполняемся по нажатии на ui обьект лкм
  54.     public void SelectChangeModul(UI_ModulEnergy ui_modul)
  55.     {
  56.         if (currentUIModul != null)
  57.         {
  58.             DisableSlider();//Отключаем слайдер (если не отключать, то его старые значения передаются во вновь выбраный currentUIModul)
  59.             currentUIModul.startCrossfade = false;//мигание ui image
  60.             currentUIModul.image.color = UI_Controller.Instance.normalColor; //цвет ui image
  61.         }
  62.  
  63.         currentUIModul = ui_modul;//Выбрали новый ui_modul
  64.         EnableSlider();//Включаем слайдер
  65.     }
  66.  
  67.     void LateUpdate()//Выводим информацию на экран
  68.     {
  69.         SetText(energyValueText, "100 %" + " / " + modulReactor.power.ToString());
  70.  
  71.         if (currentUIModul != null)
  72.         {
  73.             SetText(aboutModulText, currentUIModul.modulController.information[0]);
  74.         }
  75.         else
  76.         {
  77.             SetText(aboutModulText, "");
  78.         }
  79.  
  80.         SetText(changeEnergyMaxValueText, "  " + changeEnergySlider.value.ToString("f0") + "/" + changeEnergySlider.maxValue.ToString("f0") + "%");
  81.         SetText(freeEnergyValueText, (100 - GetModulQuoueSum()).ToString("f1") + " %");
  82.         SetText(usedEnergyText, (GetModulQuoueSum()).ToString("f1") + " %" + " / " + GetModulEnergySum().ToString("f1"));
  83.     }
  84.  
  85.     void SetText(Text text, string newText)//Дополнительная проверка на изменения переменной Text text
  86.     {
  87.         if (text.text != newText)
  88.         {
  89.             text.text = newText;
  90.         }
  91.     }
  92.  
  93.     private float GetReactorPowerPercent()
  94.     {
  95.         //float percent = (modulReactor.power * 100) / modulReactor.power;
  96.         return 0;
  97.         //return (modulReactor.power / 100) * modulReactor.power;
  98.     }
  99.  
  100.     public void ValueChange()//Метод вызывается из слайдера при изменении его значения
  101.     {
  102.         //Назначаем процент использования энергии
  103.         currentUIModul.EnergyReloadQuoue = changeEnergySlider.value;
  104.         //Пересчитываем процент использования энергии во всех других UI_ModulEnergy
  105.         Recalculate(currentUIModul);
  106.     }
  107.  
  108.     void Recalculate(UI_ModulEnergy currentUIModul)//Пересчитываем процент использования энергии во всех других UI_ModulEnergy
  109.     {
  110.         //Получаем сумму в процентах использования энергии всеми UI_ModulEnergy в списке
  111.         if (GetModulQuoueSum() > 100)
  112.         {
  113.             //От суммы отнимаем значение currentUIModul.EnergyReloadQuoue что бы не учитывать его в сумме
  114.             float sum = GetModulQuoueSum() - currentUIModul.EnergyReloadQuoue;
  115.             //От максимально возможной величины отнимаем currentUIModul.EnergyReloadQuoue
  116.             float sumToDistribut = 100 - currentUIModul.EnergyReloadQuoue;
  117.             //Максимально возможное значение процентов делим на уже использующуюся сумму
  118.             float mLocalHash = sumToDistribut / sum;
  119.             //Получаем число меньше 1 (0.???) и
  120.             //Умножаем значение EnergyReloadQuoue всех модулей в листе за исключением текущего (currentUIModul)
  121.             foreach (UI_ModulEnergy modulEnergy in ui_ModulEnergyList)
  122.             {
  123.                 if (modulEnergy != currentUIModul)
  124.                 {
  125.                     modulEnergy.EnergyReloadQuoue *= mLocalHash;
  126.                 }
  127.             }
  128.  
  129.             //В общем если сумма использованных процентов больше нуля, то уменьшаем путём умножения на 0.??? её у всех модулей
  130.         }
  131.     }
  132.  
  133.     void EnableAllUI_ModulEnergy()//Включаем ui обьект
  134.     {
  135.         foreach (UI_ModulEnergy modulEnergy in ui_ModulEnergyArray)
  136.         {
  137.             modulEnergy.gameObject.SetActive(true);
  138.         }
  139.     }
  140.  
  141.     public void ListAdd(UI_ModulEnergy ui_modul)
  142.     {
  143.         ui_ModulEnergyList.Add(ui_modul);
  144.     }
  145.  
  146.     public float GetModulQuoueSum()//Получаем сумму в процентах использования энергии всеми UI_ModulEnergy в списке
  147.     {
  148.         float sum = 0;
  149.  
  150.         for (int i = 0; i < ui_ModulEnergyList.Count; i++)
  151.         {
  152.             sum += ui_ModulEnergyList[i].EnergyReloadQuoue;
  153.         }
  154.  
  155.         return sum;
  156.     }
  157.  
  158.     public float GetModulEnergySum()//Получаем сумму использованной энергии не в процентах а в конкретном значении
  159.     {
  160.         float sum = 0;
  161.  
  162.         for (int i = 0; i < ui_ModulEnergyList.Count; i++)
  163.         {
  164.             sum += ui_ModulEnergyList[i].EnergyPower;
  165.         }
  166.  
  167.         return sum;
  168.     }
  169.  
  170.     public void ApplyChange()//Применяем отрегулированое значение к модулям персонаща
  171.     {
  172.         foreach (UI_ModulEnergy modulEnergy in ui_ModulEnergyList)
  173.         {
  174.             modulEnergy.ApplyChange();
  175.         }
  176.  
  177.         DisableSlider();
  178.  
  179.         if (currentUIModul != null)
  180.         {
  181.             currentUIModul.startCrossfade = false;
  182.             currentUIModul = null;
  183.         }
  184.  
  185.     }
  186.    
  187.     private void EnableSlider()//Включаем обьект слайдер
  188.     {
  189.         if (currentUIModul != null)//Если выбран ui обьект и получена ссылка на его currentUIModul
  190.         {
  191.             //Назначаем слайдеру максимальное и текущее значение из класса currentUIModul
  192.             changeEnergySlider.maxValue = currentUIModul.energyMaxValue;
  193.             changeEnergySlider.value = currentUIModul.EnergyReloadQuoue;
  194.  
  195.             //При изменении значения слайдера будет вызыватся метод ValueChange();
  196.             changeEnergySlider.onValueChanged.AddListener(delegate { ValueChange(); });
  197.         }
  198.         //Включаем слайдер
  199.         changeEnergySlider.gameObject.SetActive(true);
  200.     }
  201.  
  202.     private void DisableSlider()//Отключаем слайдер
  203.     {
  204.         //Очищаем делегаты и обнуляем значения слайдера
  205.         changeEnergySlider.onValueChanged.RemoveAllListeners();
  206.         changeEnergySlider.value = 0;
  207.         changeEnergySlider.maxValue = 0;
  208.         //Отключаем слайдер
  209.         changeEnergySlider.gameObject.SetActive(false);
  210.     }
  211.  
  212.     private void FindModulReactor()//Находим модуль реактор на персонаже
  213.     {
  214.         ModulBasys modul = PlayerController.botController.GetModulByType(ModulType.Reactor);
  215.         modulReactor = modul.GetModulReactor();
  216.     }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement