Использовать полную иконку персонажа и крестик для пустого приза. Добавить звук переключения, указатели выбора и анимацию добавленных призов за 0,3 секунды. Скрывать экран настроек на время работы с конфигуратором призов. Восстановить ссылку на префаб добавленного приза и оформить контекстные окна по макетам. Устранить повторное подтверждение QR-приза и исправить направление вертикальной навигации витрины. Проверено в Unity в режиме игры: ввод и сохранение значений, добавление и удаление пяти типов призов, анимация выбора и защита от повторного добавления. Ошибок в консоли нет.
59 lines
1.6 KiB
C#
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 => "Добавить витрину",
|
|
_ => "ошибка"
|
|
};
|
|
|
|
}
|