private void SetFromValue()
        {
            Type type = refValue.GetType();

            if (type == typeof(CatVector3))
            {
                CatVector3 value = (CatVector3)refValue;
                fromValue = value.ParameterClone();
            }
            else if (type == typeof(CatVector2))
            {
                CatVector2 value = (CatVector2)refValue;
                fromValue = value.ParameterClone();
            }
            else if (type == typeof(CatFloat))
            {
                CatFloat value = (CatFloat)refValue;
                fromValue = value.ParameterClone();
            }
            else if (type == typeof(CatInteger))
            {
                CatInteger value = (CatInteger)refValue;
                fromValue = value.ParameterClone();
            }
        }
        private void SetFromAndToValue(object ToValue)
        {
            Type type = ToValue.GetType();

            if (type == typeof(CatVector3))
            {
                CatVector3 value = (CatVector3)ToValue;
                toValue = value.ParameterClone();
            }
            else if (type == typeof(CatVector2))
            {
                CatVector2 value = (CatVector2)ToValue;

                toValue = value.ParameterClone();
            }
            else if (type == typeof(CatFloat))
            {
                CatFloat value = (CatFloat)ToValue;
                toValue = value.ParameterClone();
            }
            else if (type == typeof(CatInteger))
            {
                CatInteger value = (CatInteger)ToValue;
                toValue = value.ParameterClone();
            }
        }
        private void UpdateValue()
        {
            Type type = refValue.GetType();

            if (type == typeof(CatVector3))
            {
                // delta
                CatVector3 _fromValue = (CatVector3)fromValue;
                CatVector3 _toValue   = (CatVector3)toValue;
                CatVector3 delta      = _toValue - _fromValue;
                // set value
                CatVector3 value   = (CatVector3)refValue;
                float      percent = (float)curTick / totalTick;
                value.SetValue(_fromValue.GetValue() + delta.GetValue() * GetCurveValue(percent));
            }
            else if (type == typeof(CatVector2))
            {
                //delta
                CatVector2 _fromValue = (CatVector2)fromValue;
                CatVector2 _toValue   = (CatVector2)toValue;
                CatVector2 delta      = _toValue - _fromValue;
                // set value
                CatVector2 value   = (CatVector2)refValue;
                float      percent = (float)curTick / totalTick;
                value.SetValue(_fromValue.GetValue() + delta.GetValue() * GetCurveValue(percent));
            }
            else if (type == typeof(CatFloat))
            {
                // delta
                float _fromValue = ((CatFloat)fromValue);
                float _toValue   = ((CatFloat)toValue);
                float delta      = _toValue - _fromValue;
                // set value
                CatFloat value = (CatFloat)refValue;
                value.SetValue(_fromValue + delta * GetCurveValue((float)curTick / totalTick));
            }
            else if (type == typeof(CatInteger))
            {
                // delta
                int _fromValue = ((CatInteger)fromValue);
                int _toValue   = ((CatInteger)toValue);
                int delta      = _toValue - _fromValue;
                // set value
                CatInteger value = (CatInteger)refValue;
                value.SetValue(_fromValue + (int)(delta * GetCurveValue((float)curTick / totalTick)));
            }
        }