Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine.UI;
- public class UI_EnergyConfig : MonoBehaviour
- {
- //Ссылка на экземпляр класса ui обьекта(со ссылкой на экземпляр класса модуля(который висит на персонаже))
- public UI_ModulEnergy currentUIModul;
- //Ссылка на экземпляр класса (который висит на персонаже) модуль реактор
- public ModulReactor modulReactor;
- //Остаток энергии реактора
- public Text freeEnergyValueText;
- //Текущее значение энергии реактора
- public Text energyValueText;
- //Максимально возможное значение энергии для модуля
- private Text changeEnergyMaxValueText;
- //Текущее значение энергии модуля
- private Text changeEnergyValueText;
- //Описание модуля
- private Text aboutModulText;
- //
- private Text usedEnergyText;
- private Slider changeEnergySlider;
- //Список модулей, в которых можно менять значение энергии
- private List<UI_ModulEnergy> ui_ModulEnergyList = new List<UI_ModulEnergy>();
- //Массив всех модулей в ui меню
- public UI_ModulEnergy[] ui_ModulEnergyArray;
- void OnEnable()
- {
- if (changeEnergySlider == null) { changeEnergySlider = GetComponentInChildren<Slider>(); }
- FindModulReactor();//Находим модуль реатор на персонаже
- EnableAllUI_ModulEnergy();//Включаем ui обьекты в массиве ui_ModulEnergyArray
- EnableSlider();//Включаем обьект слайдер, что бы получить ссылку на его дочерние обьекты
- //Находим обьекты с текстом
- freeEnergyValueText = transform.FindChild("FreeEnergy").GetComponent<Text>();
- energyValueText = transform.FindChild("EnergyValue").GetComponent<Text>();
- aboutModulText = transform.FindChild("AboutModulText").GetComponent<Text>();
- usedEnergyText = transform.FindChild("UsedEnergy").GetComponent<Text>();
- //Находим обьекты с текстом путем перебора всех дочерних обьектов от this.gameObject
- changeEnergyMaxValueText = GameController.Instance.FindTransform(this.gameObject, "MaxValueEnergy").GetComponent<Text>();
- changeEnergyValueText = GameController.Instance.FindTransform(this.gameObject, "CurrentValueEnergy").GetComponent<Text>();
- DisableSlider();//Отключаем слайдер
- ui_ModulEnergyList.Clear();//Очищаем список
- }
- //Метод выполняемся по нажатии на ui обьект лкм
- public void SelectChangeModul(UI_ModulEnergy ui_modul)
- {
- if (currentUIModul != null)
- {
- DisableSlider();//Отключаем слайдер (если не отключать, то его старые значения передаются во вновь выбраный currentUIModul)
- currentUIModul.startCrossfade = false;//мигание ui image
- currentUIModul.image.color = UI_Controller.Instance.normalColor; //цвет ui image
- }
- currentUIModul = ui_modul;//Выбрали новый ui_modul
- EnableSlider();//Включаем слайдер
- }
- void LateUpdate()//Выводим информацию на экран
- {
- SetText(energyValueText, "100 %" + " / " + modulReactor.power.ToString());
- if (currentUIModul != null)
- {
- SetText(aboutModulText, currentUIModul.modulController.information[0]);
- }
- else
- {
- SetText(aboutModulText, "");
- }
- SetText(changeEnergyMaxValueText, " " + changeEnergySlider.value.ToString("f0") + "/" + changeEnergySlider.maxValue.ToString("f0") + "%");
- SetText(freeEnergyValueText, (100 - GetModulQuoueSum()).ToString("f1") + " %");
- SetText(usedEnergyText, (GetModulQuoueSum()).ToString("f1") + " %" + " / " + GetModulEnergySum().ToString("f1"));
- }
- void SetText(Text text, string newText)//Дополнительная проверка на изменения переменной Text text
- {
- if (text.text != newText)
- {
- text.text = newText;
- }
- }
- private float GetReactorPowerPercent()
- {
- //float percent = (modulReactor.power * 100) / modulReactor.power;
- return 0;
- //return (modulReactor.power / 100) * modulReactor.power;
- }
- public void ValueChange()//Метод вызывается из слайдера при изменении его значения
- {
- //Назначаем процент использования энергии
- currentUIModul.EnergyReloadQuoue = changeEnergySlider.value;
- //Пересчитываем процент использования энергии во всех других UI_ModulEnergy
- Recalculate(currentUIModul);
- }
- void Recalculate(UI_ModulEnergy currentUIModul)//Пересчитываем процент использования энергии во всех других UI_ModulEnergy
- {
- //Получаем сумму в процентах использования энергии всеми UI_ModulEnergy в списке
- if (GetModulQuoueSum() > 100)
- {
- //От суммы отнимаем значение currentUIModul.EnergyReloadQuoue что бы не учитывать его в сумме
- float sum = GetModulQuoueSum() - currentUIModul.EnergyReloadQuoue;
- //От максимально возможной величины отнимаем currentUIModul.EnergyReloadQuoue
- float sumToDistribut = 100 - currentUIModul.EnergyReloadQuoue;
- //Максимально возможное значение процентов делим на уже использующуюся сумму
- float mLocalHash = sumToDistribut / sum;
- //Получаем число меньше 1 (0.???) и
- //Умножаем значение EnergyReloadQuoue всех модулей в листе за исключением текущего (currentUIModul)
- foreach (UI_ModulEnergy modulEnergy in ui_ModulEnergyList)
- {
- if (modulEnergy != currentUIModul)
- {
- modulEnergy.EnergyReloadQuoue *= mLocalHash;
- }
- }
- //В общем если сумма использованных процентов больше нуля, то уменьшаем путём умножения на 0.??? её у всех модулей
- }
- }
- void EnableAllUI_ModulEnergy()//Включаем ui обьект
- {
- foreach (UI_ModulEnergy modulEnergy in ui_ModulEnergyArray)
- {
- modulEnergy.gameObject.SetActive(true);
- }
- }
- public void ListAdd(UI_ModulEnergy ui_modul)
- {
- ui_ModulEnergyList.Add(ui_modul);
- }
- public float GetModulQuoueSum()//Получаем сумму в процентах использования энергии всеми UI_ModulEnergy в списке
- {
- float sum = 0;
- for (int i = 0; i < ui_ModulEnergyList.Count; i++)
- {
- sum += ui_ModulEnergyList[i].EnergyReloadQuoue;
- }
- return sum;
- }
- public float GetModulEnergySum()//Получаем сумму использованной энергии не в процентах а в конкретном значении
- {
- float sum = 0;
- for (int i = 0; i < ui_ModulEnergyList.Count; i++)
- {
- sum += ui_ModulEnergyList[i].EnergyPower;
- }
- return sum;
- }
- public void ApplyChange()//Применяем отрегулированое значение к модулям персонаща
- {
- foreach (UI_ModulEnergy modulEnergy in ui_ModulEnergyList)
- {
- modulEnergy.ApplyChange();
- }
- DisableSlider();
- if (currentUIModul != null)
- {
- currentUIModul.startCrossfade = false;
- currentUIModul = null;
- }
- }
- private void EnableSlider()//Включаем обьект слайдер
- {
- if (currentUIModul != null)//Если выбран ui обьект и получена ссылка на его currentUIModul
- {
- //Назначаем слайдеру максимальное и текущее значение из класса currentUIModul
- changeEnergySlider.maxValue = currentUIModul.energyMaxValue;
- changeEnergySlider.value = currentUIModul.EnergyReloadQuoue;
- //При изменении значения слайдера будет вызыватся метод ValueChange();
- changeEnergySlider.onValueChanged.AddListener(delegate { ValueChange(); });
- }
- //Включаем слайдер
- changeEnergySlider.gameObject.SetActive(true);
- }
- private void DisableSlider()//Отключаем слайдер
- {
- //Очищаем делегаты и обнуляем значения слайдера
- changeEnergySlider.onValueChanged.RemoveAllListeners();
- changeEnergySlider.value = 0;
- changeEnergySlider.maxValue = 0;
- //Отключаем слайдер
- changeEnergySlider.gameObject.SetActive(false);
- }
- private void FindModulReactor()//Находим модуль реактор на персонаже
- {
- ModulBasys modul = PlayerController.botController.GetModulByType(ModulType.Reactor);
- modulReactor = modul.GetModulReactor();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement