RiftMayhem/Assets/Scripts/Player/PlayerDeathVFX.cs
Pedro Gomes 2773ef7d6e Player Death Update
- Players can now die (finally)
- Solo players have a single cheat death per scene (reviving automatically after the first death)
- group players have revive mechanic, where a player faints when his health gets to 0, creating a revive circle around him, other players can stand on it to revive him. if after x seconds they don't get revived they bleed out and stay perma death until scene changes or all players die
- Multiple VFX added using post processing for cheat death, fainting, reviving, and perma death events.
- stopped players from moving and pressing keys when dead
- enemies now change target if they try to attack a dead/fainted target.
2024-07-20 19:49:14 +01:00

65 lines
1.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
public class PlayerDeathVFX : MonoBehaviour
{
PostProcessVolume postProcess;
public float blendDuration = 0.5f;
private Coroutine blendCoroutine;
private void Awake()
{
postProcess = GetComponent<PostProcessVolume>();
}
public void BlendIn()
{
StopBlendCoroutine();
blendCoroutine = StartCoroutine(BlendWeight(0f, 1f, blendDuration));
}
public void BlendOut()
{
StopBlendCoroutine();
blendCoroutine = StartCoroutine(BlendWeight(1f, 0f, blendDuration));
}
public void ResetWeight()
{
postProcess.weight = 0;
}
public void BlendTo(float targetWeight)
{
StopBlendCoroutine();
blendCoroutine = StartCoroutine(BlendWeight(postProcess.weight, targetWeight, blendDuration));
}
private IEnumerator BlendWeight(float startWeight, float endWeight, float duration)
{
float elapsedTime = 0f;
while (elapsedTime < duration)
{
elapsedTime += Time.deltaTime;
float t = Mathf.Clamp01(elapsedTime / duration);
postProcess.weight = Mathf.Lerp(startWeight, endWeight, t);
yield return null;
}
postProcess.weight = endWeight;
}
private void StopBlendCoroutine()
{
if (blendCoroutine != null)
{
StopCoroutine(blendCoroutine);
}
}
}