using UnityEngine;
using UnityEngine.Serialization;
using System;
using System.Collections;

namespace Fungus
{
	[CommandInfo("Animation", 
	             "Set Anim Float", 
	             "Sets a float parameter on an Animator component to control a Unity animation")]
	[AddComponentMenu("")]
	public class SetAnimFloat : Command, ISerializationCallbackReceiver
	{
		[Tooltip("Reference to an Animator component in a game object")]
		public AnimatorData _animator;

		[Tooltip("Name of the float Animator parameter that will have its value changed")]
		public StringData _parameterName;

		[Tooltip("The float value to set the parameter to")]
		public FloatData value;

		public override void OnEnter()
		{
			if (_animator.Value != null)
			{
				_animator.Value.SetFloat(_parameterName.Value, value.Value);
			}

			Continue();
		}

		public override string GetSummary()
		{
			if (_animator.Value == null)
			{
				return "Error: No animator selected";
			}

			return _animator.Value.name + " (" + _parameterName.Value + ")";
		}

		public override Color GetButtonColor()
		{
			return new Color32(170, 204, 169, 255);
		}

		#region Backwards compatibility

		[HideInInspector] [FormerlySerializedAs("animator")] public Animator animatorOLD;
		[HideInInspector] [FormerlySerializedAs("parameterName")] public string parameterNameOLD;

		public void OnBeforeSerialize()
		{}

		public void OnAfterDeserialize()
		{
			if (animatorOLD != null)
			{
				_animator.Value = animatorOLD;
				animatorOLD = null;
			}

			if (parameterNameOLD != null)
			{
				_parameterName.Value = parameterNameOLD;
				parameterNameOLD = null;
			}
		}

		#endregion
	}

}