Использовать полную иконку персонажа и крестик для пустого приза. Добавить звук переключения, указатели выбора и анимацию добавленных призов за 0,3 секунды. Скрывать экран настроек на время работы с конфигуратором призов. Восстановить ссылку на префаб добавленного приза и оформить контекстные окна по макетам. Устранить повторное подтверждение QR-приза и исправить направление вертикальной навигации витрины. Проверено в Unity в режиме игры: ввод и сохранение значений, добавление и удаление пяти типов призов, анимация выбора и защита от повторного добавления. Ошибок в консоли нет.
58 lines
1.8 KiB
C#
58 lines
1.8 KiB
C#
using PrizeSystem;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
using UnityEngine.UI;
|
|
|
|
public class CountablePrizeConfigurator : BasePrizeConfigurator
|
|
{
|
|
[SerializeField, FormerlySerializedAs("icon")] private Image _icon;
|
|
[SerializeField, FormerlySerializedAs("numberInput")] private MNumberStepper _numberInput;
|
|
[SerializeField] private TextMeshProUGUI _prizeName;
|
|
|
|
private PrizeType _prizeType;
|
|
|
|
public override void Configure(PrizeType prizeType)
|
|
{
|
|
_prizeType = prizeType;
|
|
_icon.sprite = PrizeSystemManager.GetPrizeIcon(prizeType);
|
|
_prizeName.text = prizeType switch
|
|
{
|
|
PrizeType.Hopper => "ХОППЕР",
|
|
PrizeType.Ticket => "ТИКЕТ",
|
|
PrizeType.Marbles => "МАРБЛС",
|
|
_ => PrizeUtils.PrizeTypeToString(prizeType).ToUpperInvariant()
|
|
};
|
|
|
|
int maxValue = prizeType switch
|
|
{
|
|
PrizeType.Hopper => 10,
|
|
PrizeType.Ticket => 100,
|
|
PrizeType.Marbles => 10,
|
|
_ => 1
|
|
};
|
|
|
|
_numberInput.Initialize(value: 1, min: 1, maxValue);
|
|
}
|
|
|
|
public override void Confirm()
|
|
{
|
|
CountablePrizeType countableType = _prizeType switch
|
|
{
|
|
PrizeType.Hopper => CountablePrizeType.Hopper,
|
|
PrizeType.Ticket => CountablePrizeType.Ticket,
|
|
PrizeType.Marbles => CountablePrizeType.Marbles,
|
|
_ => CountablePrizeType.Hopper
|
|
};
|
|
Complete(PrizeUtils.CreatePrize(countableType, _numberInput.Value));
|
|
}
|
|
|
|
public override void UpdateControls()
|
|
{
|
|
_numberInput.SetDirection(In.GetAxis(JoystickSide.Both, InteractMode.Continious).x);
|
|
|
|
if (In.GetAction(JoystickSide.Both, InteractMode.Discrete))
|
|
Confirm();
|
|
}
|
|
}
|