sega ec0920350d Обновить интерфейс настройки призов и исправить их добавление
Использовать полную иконку персонажа и крестик для пустого приза.
Добавить звук переключения, указатели выбора и анимацию добавленных призов за 0,3 секунды.
Скрывать экран настроек на время работы с конфигуратором призов.
Восстановить ссылку на префаб добавленного приза и оформить контекстные окна по макетам.
Устранить повторное подтверждение QR-приза и исправить направление вертикальной навигации витрины.

Проверено в Unity в режиме игры: ввод и сохранение значений, добавление и удаление пяти типов призов, анимация выбора и защита от повторного добавления. Ошибок в консоли нет.
2026-09-18 13:24:45 +03:00

59 lines
1.6 KiB
C#

using DG.Tweening;
using PrizeSystem;
using System;
using UnityEngine;
using UnityEngine.UI;
public class PrizeButton : MSignalButton
{
public event Action<PrizeType> OnPrize;
private PrizeType _prizeType;
[SerializeField] private RectTransform _pointer;
public virtual void SetSelected(bool selected) => _pointer.gameObject.SetActive(selected);
public override void ClickAnimation()
{
StopAnimation();
_animation = DOTween.Sequence();
_animation.Append(_image.DOColor(_pressedColor, 0.15f));
_animation.Append(_image.DOColor(_selectedColor, 0.15f));
_animation.AppendCallback(() =>
{
OnPrize?.Invoke(_prizeType);
SoundManager.instance.PlaySfx(_clip);
});
_animation.PlayForward();
}
public void Configure(PrizeType prizeType)
{
_prizeType = prizeType;
_image.sprite = PrizeSystemManager.GetPrizeIcon(prizeType);
_textMeshPro.text = GetText(prizeType);
}
public void Configure(Prize prize)
{
_prizeType = prize.PrizeType;
_image.sprite = PrizeSystemManager.GetPrizeIcon(prize.PrizeType);
_textMeshPro.text = PrizeView.GetPrizeText(prize);
}
private string GetText(PrizeType prizeType)
=> prizeType switch
{
PrizeType.Hopper => "Добавить хоппер",
PrizeType.Marbles => "Добавить марблс",
PrizeType.Ticket => "Добавить тикет",
PrizeType.Qr => "Добавить QR",
PrizeType.VitrinaBox => "Добавить витрину",
_ => "ошибка"
};
}