48 lines
1.1 KiB
C#
48 lines
1.1 KiB
C#
using System;
|
|
using KBCore.Refs;
|
|
using Unity.Cinemachine;
|
|
using UnityEngine;
|
|
|
|
namespace Systems
|
|
{
|
|
public class CameraShake : MonoBehaviour
|
|
{
|
|
private float timer;
|
|
private bool isShaking;
|
|
|
|
[SerializeField] private float duration;
|
|
[SerializeField, Self] private CinemachineBasicMultiChannelPerlin noise;
|
|
[SerializeField] private Health health;
|
|
|
|
private void OnEnable()
|
|
{
|
|
health.OnTakeDamage += Shake;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
health.OnTakeDamage -= Shake;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!isShaking || !noise) return;
|
|
if (timer <= 0f)
|
|
{
|
|
isShaking = false;
|
|
noise.AmplitudeGain = 0f;
|
|
} else
|
|
{
|
|
timer -= Time.deltaTime;
|
|
}
|
|
}
|
|
|
|
private void Shake()
|
|
{
|
|
if (!noise) return;
|
|
isShaking = true;
|
|
timer = duration;
|
|
noise.AmplitudeGain = 1f;
|
|
}
|
|
}
|
|
} |