Add DamagePostProcess component for enhanced visual feedback on damage; implement vignette effect and adjust flash color settings

This commit is contained in:
2025-07-12 19:07:26 +02:00
parent a4fe7bbb07
commit e3e58f89cb
11 changed files with 116 additions and 359 deletions

View File

@@ -0,0 +1,66 @@
using System.Collections;
using KBCore.Refs;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace Systems
{
public class DamagePostProcess : MonoBehaviour
{
private float ogVignetteIntensity;
private Coroutine runningEffect;
[SerializeField, Scene] private Volume globalVolume;
[SerializeField, Self] private Health health;
[SerializeField] private float postProcessDuration = 0.5f;
[SerializeField] private float vignetteHitIntensity = 0.5f;
private void OnEnable()
{
health.OnTakeDamage += OnHit;
}
private void OnDisable()
{
health.OnTakeDamage -= OnHit;
}
private void OnHit()
{
if (runningEffect != null) StopCoroutine(runningEffect);
runningEffect = StartCoroutine(ApplyPostProcessEffect());
}
private IEnumerator ApplyPostProcessEffect()
{
if (!globalVolume) yield break;
if (!globalVolume.profile.TryGet<Vignette>(out var vignette))
yield break;
ogVignetteIntensity = vignette.intensity.value;
globalVolume.profile.TryGet<ChromaticAberration>(out var chromaticAberration);
vignette.intensity.value = vignetteHitIntensity;
if (chromaticAberration) chromaticAberration.active = true;
yield return new WaitForSeconds(postProcessDuration);
float fade = 0f, fadeDuration = 0.25f;
while (fade < fadeDuration)
{
fade += Time.deltaTime;
vignette.intensity.value = Mathf.Lerp(vignetteHitIntensity, ogVignetteIntensity, fade / fadeDuration);
yield return null;
}
vignette.intensity.value = ogVignetteIntensity;
if (chromaticAberration) chromaticAberration.active = false;
runningEffect = null;
}
}
}