public void DoLocalScaleTo(Transform trans, Vector3 from, Vector3 to, float duration, float delay = 0f, EaseType easyType = EaseType.None, object key = null)
    {
        Vector3 dealta = (to - from);

        DispatchManager.DispatchItem result = DispatchManager.Instance.RunWithParam(0f, duration, duration, delegate(float value, DispatchManager.DispatchItem item) {
            if (value > item.FloatParam1)
            {
                value = item.FloatParam1;
            }
            Vector3 scale = Vector3.zero;
            if (item.EaseType == EaseType.EaseIn)
            {
                scale = QuadEaseIn(value, item.VecParam1, item.VecParam2, item.FloatParam1);
            }
            else if (item.EaseType == EaseType.EaseOut)
            {
                scale = QuadEaseOut(value, item.VecParam1, item.VecParam2, item.FloatParam1);
            }
            else
            {
                scale = Linear(value, item.VecParam1, item.VecParam2, item.FloatParam1);
            }

            item.TransParam1.localScale = scale;
        }, key ?? trans, delay);

        result.FloatParam1 = duration;
        result.VecParam1   = from;
        result.VecParam2   = dealta;
        result.TransParam1 = trans;
        result.EaseType    = easyType;
    }
    public void DoFadeTo(CanvasGroup group, float from, float to, float duration, float delay = 0f, EaseType easyType = EaseType.None, object key = null)
    {
        float dealta = (to - from);

        group.alpha = from;
        DispatchManager.DispatchItem result = DispatchManager.Instance.RunWithParam(0f, duration, duration, delegate(float value, DispatchManager.DispatchItem item) {
            if (value > item.FloatParam1)
            {
                value = item.FloatParam1;
            }
            float alpha = 0;
            if (item.EaseType == EaseType.EaseIn)
            {
                alpha = QuadEaseIn(value, item.FloatParam2, item.FloatParam3, item.FloatParam1);
            }
            else if (item.EaseType == EaseType.EaseOut)
            {
                alpha = QuadEaseOut(value, item.FloatParam2, item.FloatParam3, item.FloatParam1);
            }
            else
            {
                alpha = Linear(value, item.FloatParam2, item.FloatParam3, item.FloatParam1);
            }

            item.CanvasParam1.alpha = alpha;
        }, key ?? group, delay);

        result.FloatParam1  = duration;
        result.FloatParam2  = from;
        result.FloatParam3  = dealta;
        result.CanvasParam1 = group;
        result.EaseType     = easyType;
    }
    public void DoFadeTo(Graphic graphic, float from, float to, float duration, float delay = 0f, EaseType easyType = EaseType.None, object key = null)
    {
        graphic.CrossFadeAlpha(from, 0, false);
        DispatchManager.DispatchItem result = DispatchManager.Instance.RunWithParam(0f, 1f, 0f, delegate(float value, DispatchManager.DispatchItem item) {
            item.GraphicParam1.CrossFadeAlpha(item.FloatParam2, item.FloatParam1, false);
        }, key ?? graphic, delay);

        result.FloatParam1   = duration;
        result.FloatParam2   = to;
        result.GraphicParam1 = graphic;
        result.EaseType      = easyType;
    }
//	public void DoLocalMoveXTo(Transform trans, Vector3 from, Vector3 to, float duration, float delay = 0f, EaseType easyType = EaseType.None, object key = null) {
//		Vector3 dealta = (to - from);
//
//		DispatchManager.DispatchItem result = DispatchManager.Instance.RunWithParam (0f, duration, duration, delegate(float value, DispatchManager.DispatchItem item) {
//			if (value > item.FloatParam1) {
//				value = item.FloatParam1;
//			}
//			if (item.VecParam3 == Vector3.zero) {
//				item.VecParam3 = item.VecParam1;
//			}
//			Vector3 position = Vector3.zero;
//			if (item.EaseType == EaseType.EaseIn) {
//				position = QuadEaseIn(value, item.VecParam1, item.VecParam2, item.FloatParam1);
//			}
//			else if (item.EaseType == EaseType.EaseOut) {
//				position = QuadEaseOut(value, item.VecParam1, item.VecParam2, item.FloatParam1);
//			}
//			else {
//				position = Linear(value, item.VecParam1, item.VecParam2, item.FloatParam1);
//			}
//
//			item.TransParam1.localPosition += (position - item.VecParam3);
//			item.VecParam3 = position;
//		}, key ?? trans, delay);
//
//		result.FloatParam1 = duration;
//		result.VecParam1 = from;
//		result.VecParam2 = dealta;
//		result.VecParam3 = Vector3.zero;
//		result.TransParam1 = trans;
//		result.EaseType = easyType;
//	}

    public void DoMoveBy(Transform trans, Vector3 delta, float duration, float delay = 0f, EaseType easyType = EaseType.None, object key = null)
    {
        DispatchManager.DispatchItem result = DispatchManager.Instance.RunWithParam(0f, duration, duration, delegate(float value, DispatchManager.DispatchItem item) {
            if (value > item.FloatParam1)
            {
                value = item.FloatParam1;
            }
            if (item.VecParam1 == Vector3.zero)
            {
                item.VecParam1 = item.TransParam1.position;
                item.VecParam3 = item.TransParam1.position;
            }

            Vector3 position = Vector3.zero;
            if (item.EaseType == EaseType.EaseIn)
            {
                position = QuadEaseIn(value, item.VecParam1, item.VecParam2, item.FloatParam1);
            }
            else if (item.EaseType == EaseType.EaseOut)
            {
                position = QuadEaseOut(value, item.VecParam1, item.VecParam2, item.FloatParam1);
            }
            else
            {
                position = Linear(value, item.VecParam1, item.VecParam2, item.FloatParam1);
            }

            item.TransParam1.position += (position - item.VecParam3);
            item.VecParam3             = position;
        }, key ?? trans, delay);

        result.FloatParam1 = duration;
        result.VecParam1   = Vector3.zero;
        result.VecParam2   = delta;
        result.VecParam3   = Vector3.zero;
        result.TransParam1 = trans;
        result.EaseType    = easyType;
    }
    public void DoFadeImgTo(Image img, float from, float to, float duration, float delay = 0f, EaseType easyType = EaseType.None, object key = null)
    {
        float dealta = (to - from);
        Color c      = img.color;

        c.a       = from;
        img.color = c;
        DispatchManager.DispatchItem result = DispatchManager.Instance.RunWithParam(0f, duration, duration, delegate(float value, DispatchManager.DispatchItem item) {
            if (value > item.FloatParam1)
            {
                value = item.FloatParam1;
            }
            float alpha = 0;
            if (item.EaseType == EaseType.EaseIn)
            {
                alpha = QuadEaseIn(value, item.FloatParam2, item.FloatParam3, item.FloatParam1);
            }
            else if (item.EaseType == EaseType.EaseOut)
            {
                alpha = QuadEaseOut(value, item.FloatParam2, item.FloatParam3, item.FloatParam1);
            }
            else
            {
                alpha = Linear(value, item.FloatParam2, item.FloatParam3, item.FloatParam1);
            }
            Color col = item.ImageParam1.color;
            col.a     = alpha;
            item.ImageParam1.color = col;
        }, key ?? img, delay);

        result.FloatParam1 = duration;
        result.FloatParam2 = from;
        result.FloatParam3 = dealta;
        result.ImageParam1 = img;
        result.EaseType    = easyType;
    }