You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.7 KiB
C#

4 years ago
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);
}
}