zombie_mp/Assets/KriptoFX/VolumetricBloodFX/Scripts/BFX_ManualAnimationUpdate.cs
Sewmina Dilshan 68183e5317 initial
2021-08-23 13:28:33 +05:30

58 lines
1.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BFX_ManualAnimationUpdate : MonoBehaviour
{
public BFX_BloodSettings BloodSettings;
public AnimationCurve AnimationSpeed = AnimationCurve.Linear(0, 0, 1, 1);
public float FramesCount = 99;
public float TimeLimit = 3;
public float OffsetFrames = 0;
private float currentTime;
Renderer rend;
private MaterialPropertyBlock propertyBlock;
void Awake()
{
if (propertyBlock == null)
propertyBlock = new MaterialPropertyBlock();
rend = GetComponent<Renderer>();
}
void OnEnable()
{
rend.enabled = true;
rend.GetPropertyBlock(propertyBlock);
propertyBlock.SetFloat("_UseCustomTime", 1.0f);
propertyBlock.SetFloat("_TimeInFrames", 0.0f);
rend.SetPropertyBlock(propertyBlock);
currentTime = 0;
}
void Update()
{
currentTime += Time.deltaTime * BloodSettings.AnimationSpeed;
if (currentTime / TimeLimit > 1.0)
{
if (rend.enabled) rend.enabled = false;
return;
}
var currentFrameTime = AnimationSpeed.Evaluate(currentTime / TimeLimit);
currentFrameTime = currentFrameTime * FramesCount + OffsetFrames + 1.1f;
float timeInFrames = (Mathf.Ceil(-currentFrameTime) / (FramesCount + 1)) + (1.0f / (FramesCount + 1));
rend.GetPropertyBlock(propertyBlock);
propertyBlock.SetFloat("_LightIntencity", Mathf.Clamp(BloodSettings.LightIntensityMultiplier, 0.01f, 1f));
propertyBlock.SetFloat("_TimeInFrames", timeInFrames);
rend.SetPropertyBlock(propertyBlock);
}
}