109 lines
3.0 KiB
C#
109 lines
3.0 KiB
C#
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<VitrinaToggle> 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<VitrinaToggle>(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<RectTransform>();
|
|
Pointer.position = activeElement.position;
|
|
}
|
|
|
|
|
|
private void OnDisable()
|
|
{
|
|
foreach (var toggle in toggles)
|
|
{
|
|
Destroy(toggle.gameObject);
|
|
}
|
|
toggles.Clear();
|
|
}
|
|
|
|
public override Prize GetPrize()
|
|
{
|
|
List<int> boxNumbers = new List<int>();
|
|
|
|
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()
|
|
{
|
|
}
|
|
}
|
|
} |