Использовать полную иконку персонажа и крестик для пустого приза. Добавить звук переключения, указатели выбора и анимацию добавленных призов за 0,3 секунды. Скрывать экран настроек на время работы с конфигуратором призов. Восстановить ссылку на префаб добавленного приза и оформить контекстные окна по макетам. Устранить повторное подтверждение QR-приза и исправить направление вертикальной навигации витрины. Проверено в Unity в режиме игры: ввод и сохранение значений, добавление и удаление пяти типов призов, анимация выбора и защита от повторного добавления. Ошибок в консоли нет.
56 lines
1.3 KiB
C#
56 lines
1.3 KiB
C#
using PrizeSystem;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class VitrinaPrizeConfigurator : BasePrizeConfigurator
|
|
{
|
|
public Image icon;
|
|
public Transform pointer;
|
|
public List<RectTransform> pivots;
|
|
public List<MToggle> toggles;
|
|
|
|
private int _index;
|
|
|
|
public override void Configure(PrizeType prizeType)
|
|
{
|
|
icon.sprite = PrizeSystemManager.GetPrizeIcon(prizeType);
|
|
_index = 0;
|
|
|
|
foreach (MToggle toggle in toggles)
|
|
toggle.DisplayImmediate(false);
|
|
|
|
UpdatePointerPosition();
|
|
}
|
|
|
|
public override void Confirm()
|
|
{
|
|
List<int> boxes = new();
|
|
for (int i = 0; i < toggles.Count; i++)
|
|
{
|
|
if (toggles[i].Value)
|
|
boxes.Add(i + 1);
|
|
}
|
|
|
|
Complete(PrizeUtils.CreatePrize(boxes.ToArray()));
|
|
}
|
|
|
|
public override void UpdateControls()
|
|
{
|
|
Vector2Int axes = In.GetAxis(JoystickSide.Both, InteractMode.Discrete);
|
|
_index = Mathf.Clamp(_index - axes.y, 0, toggles.Count - 1);
|
|
UpdatePointerPosition();
|
|
|
|
if (axes.x != 0)
|
|
toggles[_index].SetValue(axes.x > 0);
|
|
|
|
if (In.GetAction(JoystickSide.Both, InteractMode.Discrete))
|
|
Confirm();
|
|
}
|
|
|
|
private void UpdatePointerPosition()
|
|
{
|
|
pointer.position = pivots[_index].position;
|
|
}
|
|
}
|