using UnityEngine;
using System.Collections;
using System.Reflection;
using DentedPixel;

public class GeneralEasingTypes : MonoBehaviour {

	public float lineDrawScale = 10f;
	public AnimationCurve animationCurve;

	private string[] easeTypes = new string[]{
		"EaseLinear","EaseAnimationCurve","EaseSpring",
		"EaseInQuad","EaseOutQuad","EaseInOutQuad",
		"EaseInCubic","EaseOutCubic","EaseInOutCubic",
		"EaseInQuart","EaseOutQuart","EaseInOutQuart",
		"EaseInQuint","EaseOutQuint","EaseInOutQuint",
		"EaseInSine","EaseOutSine","EaseInOutSine",
		"EaseInExpo","EaseOutExpo","EaseInOutExpo",
		"EaseInCirc","EaseOutCirc","EaseInOutCirc",
		"EaseInBounce","EaseOutBounce","EaseInOutBounce",
		"EaseInBack","EaseOutBack","EaseInOutBack",
		"EaseInElastic","EaseOutElastic","EaseInOutElastic",
        "EasePunch","EaseShake",
	};

	void Start () {

		demoEaseTypes();
	}

	private void demoEaseTypes(){
		for(int i = 0; i < easeTypes.Length; i++){
			string easeName = easeTypes[i];
			Transform obj1 = GameObject.Find(easeName).transform.FindChild("Line");
			float obj1val = 0f;
			LTDescr lt = LeanTween.value( obj1.gameObject, 0f, 1f, 5f).setOnUpdate( (float val)=>{
				Vector3 vec = obj1.localPosition;
				vec.x = obj1val*lineDrawScale;
				vec.y = val*lineDrawScale;

				obj1.localPosition = vec;

				obj1val += Time.deltaTime/5f;
				if(obj1val>1f)
					obj1val = 0f;
			});
			if(easeName.IndexOf("AnimationCurve")>=0){
				lt.setEase(animationCurve);
            }else{
				MethodInfo theMethod = lt.GetType().GetMethod("set"+easeName);
				theMethod.Invoke(lt, null);
			}

            if(easeName.IndexOf("EasePunch")>=0){
				lt.setScale(1f);
            }
		}

		LeanTween.delayedCall(gameObject, 10f, resetLines);
		LeanTween.delayedCall(gameObject, 10.1f, demoEaseTypes);
	}

	private void resetLines(){
		for(int i = 0; i < easeTypes.Length; i++){
			Transform obj1 = GameObject.Find(easeTypes[i]).transform.FindChild("Line");
			obj1.localPosition = new Vector3(0f,0f,0f);
		}
	}

}
