CapersProject/Assets/02.Scripts/VisualFeedbackManager.cs
2024-10-08 22:44:20 +09:00

78 lines
2.2 KiB
C#

using System.Collections;
using BlueWater.Audios;
using Unity.Cinemachine;
using UnityEngine;
namespace BlueWater
{
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
}
}