using System.Collections.Generic; using System.Linq; using UnityEngine; namespace PrizeSystem { public class VitrinaPrizeInput : AbstractPrizeConfigurator { [SerializeField] private RectTransform Content; [SerializeField] private GameObject TogglePrefab; [SerializeField] RectTransform Pointer; [SerializeField] private AudioClip NextToggleClip; private List toggles; private int index = 0; private const int BoxesCount = 5; private int[] boxes; public override void ChangeOption(int direction) { //тут добавить звук index = (index + 1 + BoxesCount) % BoxesCount; SetPointerToCurrentToggle(); if(NextToggleClip != null) SoundManager.instance.playClip(NextToggleClip); } public override void Configure(Prize prize) { if (prize is VitrinaPrize vitrinaPrize) { boxes = vitrinaPrize.Boxes.ToArray(); for (int i = 0; i < BoxesCount; i++) { if (boxes.Contains(i+1)) { toggles[i].SetValue(true); } else { toggles[i].SetValue(false); } } } } private void OnEnable() { index = 0; toggles = new(); for (int i = 0; i < BoxesCount; i++) { var go = Instantiate(TogglePrefab, Content); if (go.TryGetComponent(out var toggle)) { toggle.Configure($"Ячейка {i + 1}:", false); toggles.Add(toggle); } else { Debug.LogError("Нет компонента на префабе тоггла."); } } if(toggles.Count > 0) SetPointerToCurrentToggle(); } void SetPointerToCurrentToggle() { RectTransform activeElement = Content.GetChild(index).GetComponent(); Pointer.position = activeElement.position; } private void OnDisable() { foreach (var toggle in toggles) { Destroy(toggle.gameObject); } toggles.Clear(); } public override Prize GetPrize() { List boxNumbers = new List(); for (int i = 0;i < toggles.Count; i++) if (toggles[i].State) boxNumbers.Add(i+1); return PrizeUtils.CreatePrize(boxNumbers.ToArray()); } public override void Swipe(int direction) { bool value = direction > 0 ? true : false; toggles[index].SetValue(value); } public override void Tick() { } } }