using System.Collections; using System.Collections.Generic; using UnityEngine; using System; /// <summary> /// Control the animation from LocomotionFinal /// </summary> public class AnimationController : MonoBehaviour { private Vector3 _oldPosition; private Animator _objectAnimator; private Agent _agent; private uint agentID; private Vector3 _oldVelocity; private Quaternion _oldRotation; private string _oldState = "Idle"; private float _timeIdle=0; public string _defaultIdleAnimation = "Talking"; public bool IsIdle { get { return _timeIdle > 1.0f; } } // Use this for initialization void Start() { if (_objectAnimator != null) return; _agent = GetComponent<Agent>(); if(_agent != null) agentID = _agent.GetID(); else agentID = 0; _oldPosition = this.transform.position; _objectAnimator = this.GetComponent<Animator>(); _objectAnimator.applyRootMotion = false; _objectAnimator.speed = 0; _objectAnimator.SetFloat("Speed", 0); _objectAnimator.SetFloat("AngularSpeed", 0); _objectAnimator.SetInteger("AnimationType", UnityEngine.Random.Range(1,4)); // 1, 2 or 3 #if MIDDLEVR _objectAnimator.cullingMode = AnimatorCullingMode.CullUpdateTransforms; _objectAnimator.enabled = false; #endif if(ToolsTime.useRos()){ _objectAnimator.cullingMode = AnimatorCullingMode.AlwaysAnimate; _objectAnimator.enabled = false; } } public void temp() { //idleAnimationID = ((TrialAgent) LoaderConfig.agentsInfo[(int)agentID - 2]).idleAnimationID; //_objectAnimator.SetFloat("IdleAnimationID", idleAnimationID); //applauseAnimationID = ((TrialMultiControlLawAgent) LoaderConfig.agentsInfo[(int)agentID - 2]).applauseAnimationID; //lookAroundAnimationID = ((TrialMultiControlLawAgent) LoaderConfig.agentsInfo[(int)agentID - 2]).lookAroundAnimationID; //_objectAnimator.SetFloat("ApplauseAnimationID", applauseAnimationID); //_objectAnimator.SetFloat("LookAroundAnimationID", lookAroundAnimationID); } public void setAnimationType(int type) { if (_objectAnimator == null) Start(); _objectAnimator.SetInteger("AnimationType", type); } public void setAnimOffset(float offset) { if (_objectAnimator == null) Start(); _objectAnimator.SetFloat("CycleOffset", offset); } // Update is called once per frame void Update() { if (ToolsTime.DeltaTime != 0) { _objectAnimator.speed = 1; //If object is ready and the time isn't in pause, play the animation as fast as the virtual human speed. float animationSpeed; Vector3 position = _oldPosition - this.transform.position; float angle = Vector3.SignedAngle(_oldVelocity, this.transform.forward, this.transform.up); float angularSpeed = angle / ToolsTime.DeltaTime; animationSpeed = position.magnitude / ToolsTime.DeltaTime / 1.4f; print("agent"); print(animationSpeed); print(_timeIdle); if (animationSpeed > 0.01f) { _timeIdle = 0.0f; if (_oldState != "Walk") { _oldState = "Walk"; } } else { // wait before entering idle state _timeIdle += ToolsTime.DeltaTime; } if (IsIdle) { animationSpeed = 0.0f; if (_oldState != _defaultIdleAnimation) { print("Switching to Idle Animation"); _oldState = _defaultIdleAnimation; _objectAnimator.SetInteger("AnimationType", UnityEngine.Random.Range(1,4)); // 1, 2 or 3 _objectAnimator.Play("Transition"); } } _objectAnimator.SetFloat("Speed", animationSpeed); _objectAnimator.SetFloat("AngularSpeed", angularSpeed, 100f, ToolsTime.DeltaTime); _objectAnimator.SetBool("One-Eighty", false); _objectAnimator.SetFloat("TurnAngle", 0); if (IsIdle) { if (Mathf.Abs(angle) >= 45) { _objectAnimator.SetBool("One-Eighty", true); _objectAnimator.SetFloat("TurnAngle", angle); } } } else { // if the time is in pause, pause the animation. _objectAnimator.speed = 0; } _oldPosition = this.transform.position; _oldRotation = this.transform.rotation; _oldVelocity = this.transform.forward; #if MIDDLEVR _objectAnimator.Update(ToolsTime.DeltaTime); #endif if(ToolsTime.useRos()){ _objectAnimator.Update(ToolsTime.DeltaTime); } } private void LateUpdate() { //if (ToolsInput.GetKeyDown(KeyCode.Z)) //{ // idleAnimationID--; // if (idleAnimationID < -35) // idleAnimationID = 12; // ToolsDebug.log("idleAnimationID="+idleAnimationID); // _objectAnimator.SetFloat("IdleAnimationID", idleAnimationID); //} //if (ToolsInput.GetKeyDown(KeyCode.X)) //{ // idleAnimationID++; // if (idleAnimationID > 12) // idleAnimationID = -35; // ToolsDebug.log("idleAnimationID=" + idleAnimationID); // _objectAnimator.SetFloat("IdleAnimationID", idleAnimationID); //} } }