60 lines
1.3 KiB
C#
60 lines
1.3 KiB
C#
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
|
|
//
|
|
// Purpose: Animator whose speed is set based on a linear mapping
|
|
//
|
|
//=============================================================================
|
|
|
|
using UnityEngine;
|
|
public class LinearAnimator : MonoBehaviour
|
|
{
|
|
public LinearMapping linearMapping;
|
|
public Animator animator;
|
|
private float currentLinearMapping = float.NaN;
|
|
private int framesUnchanged = 0;
|
|
public float speed = 1;
|
|
public bool reverse;
|
|
//-------------------------------------------------
|
|
void Awake()
|
|
{
|
|
if ( animator == null )
|
|
{
|
|
animator = GetComponent<Animator>();
|
|
}
|
|
|
|
animator.speed = 0.0f;
|
|
|
|
if ( linearMapping == null )
|
|
{
|
|
linearMapping = GetComponent<LinearMapping>();
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
void Update()
|
|
{
|
|
if ( currentLinearMapping != linearMapping.value )
|
|
{
|
|
currentLinearMapping = linearMapping.value;
|
|
animator.enabled = true;
|
|
if (reverse)
|
|
{
|
|
animator.Play(0, 0, (1-currentLinearMapping) * speed);
|
|
}
|
|
else
|
|
{
|
|
animator.Play(0, 0, currentLinearMapping * speed);
|
|
}
|
|
framesUnchanged = 0;
|
|
}
|
|
else
|
|
{
|
|
framesUnchanged++;
|
|
if ( framesUnchanged > 2 )
|
|
{
|
|
animator.enabled = false;
|
|
}
|
|
}
|
|
}
|
|
}
|