58 lines
1.6 KiB
C#
58 lines
1.6 KiB
C#
using System;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class CharacterSelectionPanel : MonoBehaviour, IControl
|
|
{
|
|
|
|
public event Action<Character> BeforeCharacterChange;
|
|
public event Action<Character> OnCharacterChanged;
|
|
|
|
[SerializeField] TextMeshProUGUI CharacterNameLabel;
|
|
[SerializeField] Image CharacterIcon;
|
|
[SerializeField] float ChangeCharacterInterval = 0.15f;
|
|
[SerializeField] AudioClip ClickSound;
|
|
|
|
private float LastSwipeTime = 0;
|
|
private Character[] characters;
|
|
public int CharacterIndex { get; private set; }
|
|
|
|
|
|
public int CharactersCount => characters.Length;
|
|
public Character SelectedCharacter => characters[CharacterIndex];
|
|
private bool CanSwipe => Time.time - LastSwipeTime > ChangeCharacterInterval;
|
|
|
|
|
|
private void OnEnable()
|
|
{
|
|
characters = CharactersController.GetCharactersArray();
|
|
CharacterIndex = 0;
|
|
DisplaySelectedCharacter();
|
|
}
|
|
|
|
public void Swipe(int direction)
|
|
{
|
|
if (CanSwipe)
|
|
{
|
|
if (ClickSound != null) { SoundManager.instance.playClip(ClickSound); }
|
|
BeforeCharacterChange?.Invoke(SelectedCharacter);
|
|
|
|
CharacterIndex = (CharacterIndex + direction + CharactersCount) % CharactersCount;
|
|
DisplaySelectedCharacter();
|
|
|
|
OnCharacterChanged?.Invoke(SelectedCharacter);
|
|
LastSwipeTime = Time.time;
|
|
}
|
|
}
|
|
|
|
public void Switch() { }
|
|
|
|
private void DisplaySelectedCharacter()
|
|
{
|
|
CharacterNameLabel.text = SelectedCharacter.Name;
|
|
CharacterIcon.sprite = SelectedCharacter.Icon;
|
|
}
|
|
|
|
}
|