Использовать полную иконку персонажа и крестик для пустого приза. Добавить звук переключения, указатели выбора и анимацию добавленных призов за 0,3 секунды. Скрывать экран настроек на время работы с конфигуратором призов. Восстановить ссылку на префаб добавленного приза и оформить контекстные окна по макетам. Устранить повторное подтверждение QR-приза и исправить направление вертикальной навигации витрины. Проверено в Unity в режиме игры: ввод и сохранение значений, добавление и удаление пяти типов призов, анимация выбора и защита от повторного добавления. Ошибок в консоли нет.
45 lines
996 B
C#
45 lines
996 B
C#
using PrizeSystem;
|
|
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public abstract class BasePrizeConfigurator : MonoBehaviour, IControlable
|
|
{
|
|
public event Action<Prize> OnPrizeConfigured;
|
|
|
|
[SerializeField] private Button _applyButton;
|
|
|
|
private bool _completed;
|
|
|
|
public bool ControlsEnabled { get; set; } = true;
|
|
|
|
protected virtual void Awake()
|
|
{
|
|
if (_applyButton != null)
|
|
_applyButton.onClick.AddListener(Confirm);
|
|
}
|
|
|
|
protected virtual void OnDestroy()
|
|
{
|
|
if (_applyButton != null)
|
|
_applyButton.onClick.RemoveListener(Confirm);
|
|
}
|
|
|
|
public abstract void Configure(PrizeType prizeType);
|
|
|
|
public abstract void Confirm();
|
|
|
|
public virtual void Complete(Prize prize)
|
|
{
|
|
if (_completed)
|
|
return;
|
|
|
|
_completed = true;
|
|
ControlsEnabled = false;
|
|
OnPrizeConfigured?.Invoke(prize);
|
|
Destroy(gameObject);
|
|
}
|
|
|
|
public virtual void UpdateControls() { }
|
|
}
|