#pragma warning disable 612, 618 //for handles. will fix
        protected void DoParameterPositionHandle(AnimatedParameter animParam, TransformSpace space)
        {
            UnityEditor.EditorGUI.BeginChangeCheck();
            var originalPos = (Vector3)animParam.GetCurrentValue();
            var pos         = TransformPoint(originalPos, space);
            var newPos      = UnityEditor.Handles.PositionHandle(pos, Quaternion.identity);

            newPos = InverseTransformPoint(newPos, space);
            UnityEditor.Handles.SphereCap(-10, pos, Quaternion.identity, 0.1f);
            if (UnityEditor.EditorGUI.EndChangeCheck())
            {
                UnityEditor.Undo.RecordObject(this, "Position Change");
                if (RootTimeWithinRange())
                {
                    if (!Event.current.shift)
                    {
                        animParam.SetCurrentValue(newPos);
                    }
                    else
                    {
                        animParam.OffsetValue(newPos - originalPos);
                    }
                }
                else
                {
                    animParam.SetCurrentValue(newPos);
                    animParam.OffsetValue(newPos - originalPos);
                }

                UnityEditor.EditorUtility.SetDirty(this);
            }
        }
        ///In SceneGUI, shows a position handle for target parameter of target keyable
        public static bool DoParameterPositionHandle(IKeyable keyable, AnimatedParameter animParam, TransformSpace space)
        {
            var originalPos = (Vector3)animParam.GetCurrentValueAsObject();
            var newPos      = originalPos;

            if (DoVectorPositionHandle(keyable, space, ref newPos))
            {
                if (keyable.IsRootTimeWithinClip())
                {
                    if (!Event.current.shift)
                    {
                        animParam.SetCurrentValue(newPos);
                    }
                    else
                    {
                        animParam.OffsetValue(newPos - originalPos);
                    }
                }
                else
                {
                    animParam.SetCurrentValue(newPos);
                    animParam.OffsetValue(newPos - originalPos);
                }
                EditorUtility.SetDirty(keyable as Object);
                return(true);
            }
            return(false);
        }