private void PrivModifiedMove(Vector3 direction, ObjectInteractionController oicCaller, Collider other)
    {
        SplinePlayerCharacterController otherPcc = other.transform.GetComponent <SplinePlayerCharacterController>();
        float dotMagnitude = Vector3.Dot(deskSpline.transform.TransformVector(deskSpline.GetDirection(deskProgress).normalized), direction);

        if (!otherPcc.currPlayerStatus[PlayerCharacterController.StatusListElement.ROOTED])
        {
            if (Math.Abs(dotMagnitude) > 0.05f)
            {
                deskProgress = deskSpline.GetLengthAtDistFromParametric(Math.Sign(dotMagnitude) * otherPcc.charSpeed * Time.deltaTime, deskProgress);
                Vector3 newPosition = deskSpline.GetPoint(deskProgress);

                Quaternion targetRotation = Quaternion.LookRotation(Math.Sign(dotMagnitude) * deskSpline.transform.TransformVector(deskSpline.GetDirection(deskProgress).normalized), Vector3.up);
                Quaternion newRotation    = Quaternion.Lerp(otherPcc.pcc_rigidbody.rotation, targetRotation, otherPcc.turnSmooth);

                otherPcc.transform.SetPositionAndRotation(newPosition, newRotation);

                otherPcc.pcc_animator.SetFloat("Speed", 5.7f, otherPcc.speedDamptime, Time.deltaTime);
            }
            else
            {
                otherPcc.pcc_animator.SetFloat("Speed", 0f, otherPcc.speedDamptime, Time.deltaTime);
            }
        }
        else
        {
            if (Math.Abs(dotMagnitude) > 0.05f)
            {
                otherPcc.transform.rotation = Quaternion.LookRotation(Math.Sign(dotMagnitude) * deskSpline.GetDirection(deskProgress).normalized, Vector3.up);
                otherPcc.pcc_animator.SetFloat("Speed", 0f, otherPcc.speedDamptime, Time.deltaTime);
            }
        }
    }
    private void PrivModifiedMove(Vector3 direction, ObjectInteractionController oicCaller, Collider other)
    {
        SplinePlayerCharacterController otherPcc = other.transform.GetComponent <SplinePlayerCharacterController>();
        float dotMagnitude = Vector3.Dot(plantSpline.transform.TransformVector(plantSpline.GetDirection(plantProgress).normalized), direction);

        if (!otherPcc.currPlayerStatus[PlayerCharacterController.StatusListElement.ROOTED])
        {
            if (Math.Abs(dotMagnitude) > 0.05f)
            {
                // Lerp-Rotate the rigidbody toward the direction

                //Debug.Log(Time.timeSinceLevelLoad+" - SplineDir " + plantSpline.GetDirection(plantProgress).normalized
                //          +"playerDir"+ direction);

                //plantProgress = plantSpline.GetLengthAtDistFromParametric(Math.Sign(dotMagnitude) * otherPcc.charSpeed * Time.deltaTime, plantProgress);
                //Vector3 newPosition = plantSpline.GetPoint(plantProgress);

                //Quaternion targetRotation = Quaternion.LookRotation(Math.Sign(dotMagnitude) * plantSpline.GetDirection(plantProgress).normalized, Vector3.up);
                //Quaternion newRotation = Quaternion.Lerp(otherPcc.pcc_rigidbody.rotation, targetRotation, otherPcc.turnSmooth);

                //transform.SetPositionAndRotation(newPosition, newRotation);


                //otherPcc.pcc_animator.SetFloat("Speed", 4.5f, otherPcc.speedDamptime, Time.deltaTime);

                plantProgress = plantSpline.GetLengthAtDistFromParametric(Math.Sign(dotMagnitude) * otherPcc.charSpeed * Time.deltaTime, plantProgress);
                Vector3 newPosition = plantSpline.GetPoint(plantProgress);

                Quaternion targetRotation = Quaternion.LookRotation(Math.Sign(dotMagnitude) * plantSpline.transform.TransformVector(plantSpline.GetDirection(plantProgress).normalized), Vector3.up);
                Quaternion newRotation    = Quaternion.Lerp(otherPcc.pcc_rigidbody.rotation, targetRotation, otherPcc.turnSmooth);

                otherPcc.transform.SetPositionAndRotation(newPosition, newRotation);


                transform.position = otherPcc.transform.position + (this.transform.position - hidePosition.position);


                //otherPcc.pcc_animator.SetFloat("Speed", 5.7f, otherPcc.speedDamptime, Time.deltaTime);
                otherPcc.ChangeStatus(PlayerCharacterController.StatusListElement.HIDDEN, false);
            }
            else
            {
                otherPcc.pcc_animator.SetFloat("Speed", 0f, otherPcc.speedDamptime, Time.deltaTime);
            }
        }
        else
        {
            if (Math.Abs(dotMagnitude) > 0.05f)
            {
                otherPcc.transform.rotation = Quaternion.LookRotation(Math.Sign(dotMagnitude) * plantSpline.GetDirection(plantProgress).normalized, Vector3.up);
                otherPcc.pcc_animator.SetFloat("Speed", 0f, otherPcc.speedDamptime, Time.deltaTime);
            }
        }
    }
    private IEnumerator MoveInVentialtion()
    {
        float splineSize = VentiSpline.GetLength(1.0f);

        while (currProgress < 1.0f)
        {
            //currProgress += Time.deltaTime / duration;
            currProgress = VentiSpline.GetLengthAtDistFromParametric(splineSize * Time.deltaTime / duration, currProgress);
            if (currProgress > 1.0f)
            {
                currProgress = 1.0f;
            }
            pcc.transform.SetPositionAndRotation(
                VentiSpline.GetPoint(currProgress),
                Quaternion.Euler(VentiSpline.GetDirection(currProgress)));
            yield return(null);
        }

        // CallBack
        EndMoveInVentilation();
    }
    //public Vector3 TESTSplinePosition;



    public override void ImplementedMove(Vector3 direction)
    {
        if (lSpline != null)
        {
            float dotMagnitude = Vector3.Dot(lSpline.GetDirection(progress).normalized, direction);
            if (!currPlayerStatus[StatusListElement.ROOTED])
            {
                if (Math.Abs(dotMagnitude) > 0.05f)
                {
                    // Lerp-Rotate the rigidbody toward the direction
                    //Math.Sign(dotMagnitude) * charSpeed * Time.deltaTime
                    progress = lSpline.GetLengthAtDistFromParametric(Math.Sign(dotMagnitude) * charSpeed * Time.deltaTime, progress);
                    Vector3 newPosition = lSpline.GetPoint(progress);

                    Quaternion targetRotation = Quaternion.LookRotation(Math.Sign(dotMagnitude) * lSpline.GetDirection(progress).normalized, Vector3.up);
                    Quaternion newRotation    = Quaternion.Lerp(pcc_rigidbody.rotation, targetRotation, turnSmooth);

                    transform.SetPositionAndRotation(newPosition, newRotation);


                    pcc_animator.SetFloat("Speed", 4.5f, speedDamptime, Time.deltaTime);
                }
                else
                {
                    pcc_animator.SetFloat("Speed", 0f, speedDamptime, Time.deltaTime);
                }
            }
            else
            {
                if (Math.Abs(dotMagnitude) > 0.05f)
                {
                    transform.rotation = Quaternion.LookRotation(Math.Sign(dotMagnitude) * lSpline.GetDirection(progress).normalized, Vector3.up);
                }
                pcc_animator.SetFloat("Speed", 0f, speedDamptime, Time.deltaTime);
            }
        }
    }
    private void OnSceneGUI()
    {
        spline = target as SplineLine;
        int length = spline.GetControlPointCount;

        Vector3[] points = new Vector3[length];
        handleTransform = spline.transform;
        handleRotation  = Tools.pivotRotation == PivotRotation.Local ?
                          handleTransform.rotation : Quaternion.identity;

        for (int i = 0; i < length; i++)
        {
            points[i] = ShowPoint(i);
            if (i + 1 != length)
            {
                Handles.DrawLine(handleTransform.TransformPoint(spline.GetControlPoint(i)), handleTransform.TransformPoint(spline.GetControlPoint(i + 1)));
            }
        }
        Handles.color = Color.red;
        float size = HandleUtility.GetHandleSize(points[0]);

        Handles.Button(spline.GetPoint(spline.t), Quaternion.identity, size * handleSize, size * pickSize, Handles.DotHandleCap);
        // Debug.Log("Length :" + spline.GetLength(spline.t) + "Param : "+ spline.GetParametricLength(spline.GetLength(spline.t)));
    }