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

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

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;
}
}