78 lines
1.8 KiB
C#

using System;
using UnityEngine;
using UnityEngine.UI;
public class SignalView : MonoBehaviour, ISettingView
{
public static event Action<string> SignalEmmited;
[Header("Layout ссылки")]
[SerializeField] private Image TimerImage;
[SerializeField] private Image ButtonImage;
[Header("Настройки анимации")]
[SerializeField] private AnimationCurve TimerCurve;
[SerializeField] private Color ButtonColorPressed;
[SerializeField] private Color ButtonColorNormal;
[Header("Звуки")]
[SerializeField] private AudioSource Audio;
[SerializeField] private AudioClip AcceptedClip;
[SerializeField] private float minPitch;
[SerializeField] private float maxPitch;
[SerializeField] private float TimeToEmmit = 2;
private string signal;
private float timer;
private bool pressed;
public void Initialize(SettingDTO setting)
{
signal = setting.SignalValue;
}
public void TakeInput(int direction)
{
pressed = direction != 0;
}
private void LateUpdate()
{
timer += Time.deltaTime * (pressed ? 1 : -1);
timer = Mathf.Clamp(timer, 0, TimeToEmmit);
Display();
if (timer == TimeToEmmit)
EmmitSignal();
pressed = false;
}
private void Display()
{
ButtonImage.color = pressed ? ButtonColorPressed : ButtonColorNormal;
float percent = TimerCurve.Evaluate(timer / TimeToEmmit);
TimerImage.fillAmount = percent;
var pitch = Mathf.Lerp(minPitch, maxPitch, percent);
var volume = percent;
Audio.volume = volume;
Audio.pitch = pitch;
}
private void EmmitSignal()
{
timer = 0;
SoundManager.PlayUi(AcceptedClip);
SignalEmmited?.Invoke(signal);
}
}