105 lines
3.7 KiB
C#
105 lines
3.7 KiB
C#
using PrizeSystem;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
//Это как шкала че есть в витрине чего нет.
|
|
public class VitrinaView : MonoBehaviour
|
|
{
|
|
public static VitrinaView instance;
|
|
|
|
[SerializeField] private List<Image> Cells;
|
|
|
|
[SerializeField] private Sprite AvailableCell;
|
|
[SerializeField] private Sprite AvailableEmptyCell;
|
|
[SerializeField] private Sprite NotAvailableCell;
|
|
|
|
[SerializeField] private Color AvailableColor;
|
|
[SerializeField] private Color AvailableEmptyColor;
|
|
[SerializeField] private Color NotAvailableColor;
|
|
|
|
private void Start()
|
|
{
|
|
instance = this;
|
|
CharacterEventBus.Instance.OnCharacterAppeared.AddListener(ActivateIfNeed);
|
|
Deactivate();
|
|
|
|
}
|
|
|
|
public void ActivateIfNeed()
|
|
{
|
|
bool hasPrize = CharacterController.CurrentCharacter.HasPrize;
|
|
if (hasPrize && CharacterController.CurrentCharacter.prize is VitrinaPrize vitrinaPrize)
|
|
{
|
|
gameObject.SetActive(true);
|
|
foreach (var cell in Cells)
|
|
{
|
|
cell.sprite = NotAvailableCell;
|
|
cell.GetComponentInChildren<TextMeshProUGUI>().color = NotAvailableColor;
|
|
}
|
|
SetPrizesAsync(vitrinaPrize);
|
|
return;
|
|
}
|
|
Deactivate();
|
|
}
|
|
|
|
public async void SetPrizesAsync(VitrinaPrize vitrinaPrize)
|
|
{
|
|
try
|
|
{
|
|
// Получаем готовые к выдаче ячейки
|
|
int[] readyBoxes = await PrizeStandController.GetReadyBoxesAsync();
|
|
|
|
// Получаем ячейки, которые нужно выдать из VitrinaPrize
|
|
int[] boxesToGive = vitrinaPrize?.Boxes ?? new int[0];
|
|
|
|
// Создаем HashSet для быстрого поиска готовых ячеек
|
|
HashSet<int> readyBoxesSet = new HashSet<int>(readyBoxes);
|
|
|
|
// Создаем HashSet для быстрого поиска ячеек, которые нужно выдать
|
|
HashSet<int> boxesToGiveSet = new HashSet<int>(boxesToGive);
|
|
|
|
// Проходим по всем ячейкам (индексы 0-based, номера ячеек 1-based)
|
|
for (int i = 0; i < Cells.Count; i++)
|
|
{
|
|
int boxNumber = i + 1; // Преобразуем индекс в номер ячейки (1-based)
|
|
|
|
if (boxesToGiveSet.Contains(boxNumber))
|
|
{
|
|
// Ячейка должна быть выдана, проверяем доступность
|
|
if (readyBoxesSet.Contains(boxNumber))
|
|
{
|
|
Cells[i].sprite = AvailableCell; // Доступна для выдачи
|
|
Cells[i].GetComponentInChildren<TextMeshProUGUI>().color = AvailableColor;
|
|
}
|
|
else
|
|
{
|
|
Cells[i].sprite = AvailableEmptyCell; // Недоступна для выдачи
|
|
Cells[i].GetComponentInChildren<TextMeshProUGUI>().color = AvailableEmptyColor;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Ячейка не входит в список для выдачи
|
|
Cells[i].sprite = NotAvailableCell;
|
|
Cells[i].GetComponentInChildren<TextMeshProUGUI>().color = NotAvailableColor;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Debug.LogError($"Ошибка при установке призов: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
public void Deactivate()
|
|
{
|
|
gameObject.SetActive(false);
|
|
}
|
|
|
|
|
|
|
|
}
|