75 lines
2.2 KiB
C#
75 lines
2.2 KiB
C#
using System.Collections;
|
|
using DDD.Audios;
|
|
using Unity.Cinemachine;
|
|
using UnityEngine;
|
|
|
|
public class VisualFeedbackManager : Singleton<VisualFeedbackManager>
|
|
{
|
|
private float _baseTimeScale = 1f;
|
|
private float _currentHitStopCoefficient = 1f;
|
|
|
|
private void Start()
|
|
{
|
|
ResetTimeScale();
|
|
}
|
|
|
|
public void SetBaseTimeScale(float value)
|
|
{
|
|
_baseTimeScale = value;
|
|
UpdateTimeScale();
|
|
}
|
|
|
|
public void SetHitStop(float value)
|
|
{
|
|
_currentHitStopCoefficient = value;
|
|
UpdateTimeScale();
|
|
}
|
|
|
|
public void ResetTimeScale()
|
|
{
|
|
_baseTimeScale = 1f;
|
|
_currentHitStopCoefficient = 1f;
|
|
UpdateTimeScale();
|
|
}
|
|
|
|
private void UpdateTimeScale()
|
|
{
|
|
Time.timeScale = _baseTimeScale * _currentHitStopCoefficient;
|
|
Time.fixedDeltaTime = Time.timeScale * 0.02f;
|
|
|
|
AudioManager.Instance.SetPitchSfxAll(Time.timeScale);
|
|
}
|
|
|
|
#region HitStop
|
|
|
|
public void TriggerHitStop(float duration)
|
|
{
|
|
StartCoroutine(HitStopCoroutine(duration));
|
|
}
|
|
|
|
private IEnumerator HitStopCoroutine(float duration)
|
|
{
|
|
SetHitStop(0.05f);
|
|
yield return new WaitForSecondsRealtime(duration);
|
|
SetHitStop(1f);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region CameraShake
|
|
|
|
public void CameraShake(CinemachineCamera cinemachineCamera, float power = 0.5f, float duration = 0.1f)
|
|
{
|
|
var impulseListener = cinemachineCamera.GetComponent<CinemachineImpulseListener>();
|
|
var impulseSource = cinemachineCamera.GetComponent<CinemachineImpulseSource>();
|
|
|
|
impulseSource.DefaultVelocity = new Vector3(0.5f, 0.5f, 0.5f);
|
|
impulseListener.Gain = power;
|
|
|
|
impulseSource.ImpulseDefinition.TimeEnvelope.SustainTime = duration;
|
|
impulseSource.ImpulseDefinition.TimeEnvelope.DecayTime = 0.2f;
|
|
impulseSource.GenerateImpulse();
|
|
}
|
|
|
|
#endregion
|
|
} |