using System; using UnityEngine; using UnityEngine.UI; public class SignalView : MonoBehaviour, ISettingView { public static event Action 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); } }