- 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.
65 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|