private void HandleTouches()
 {
     if (Input.GetMouseButtonDown(0))
     {
         if (!startedLine)
         {
             if (tracer)
             {
                 tracer.StartLine();
             }
         }
         startedLine = !(toggleSeek && startedLine);
     }
     else if ((!toggleSeek && Input.GetMouseButton(0)) || (toggleSeek && startedLine))
     {
         Drag();
     }
     else
     {
         startedLine = false;
         mover.SlowDown();
         if (tracer)
         {
             tracer.DestroyLine();
         }
     }
 }
    void Update()
    {
        partnerWeight = Mathf.Clamp(partnerWeight, 0, 1);

        if (partnerLink.Partner != null)
        {
            if (tracer != null && !startedLine)
            {
                tracer.StartLine();
                startedLine = true;
            }

            if (partnerLink.Leading)
            {
                Vector3 destination = FindSeekingPoint((waypoints[current].transform.position - transform.position) * mover.maxSpeed);

                Vector3 fromPartner = transform.position - partnerLink.Partner.transform.position;
                fromPartner.z = 0;
                Vector3 fromPast = destination - transform.position;
                fromPast.z = 0;

                if (partnerWeight > 0 && Vector3.Dot(fromPartner, fromPast) <= 0)
                {
                    Vector3 waveFollowChange = fromPast * (1 - partnerWeight);

                    Vector3 considerPartnerChange = fromPartner.normalized * mover.maxSpeed * partnerWeight * Time.deltaTime;
                    destination = transform.position + waveFollowChange + considerPartnerChange;
                }

                mover.Accelerate(destination - transform.position);

                if (tracer != null)
                {
                    tracer.AddVertex(transform.position);
                }
            }
            else
            {
                mover.Accelerate(partnerLink.Partner.transform.position - transform.position);
                if (tracer != null)
                {
                    tracer.AddVertex(transform.position);
                }
            }
        }
        else if (moveWithoutPartner)
        {
            if (tracer != null && !startedLine)
            {
                tracer.StartLine();
                startedLine = true;
            }
            Vector3 destination = FindSeekingPoint((waypoints[current].transform.position - transform.position) * mover.maxSpeed);
            mover.Accelerate(destination - transform.position);
            mover.Accelerate(destination - transform.position);
            if (tracer != null)
            {
                tracer.AddVertex(transform.position);
            }
        }
        else
        {
            mover.SlowDown();
            if (tracer)
            {
                tracer.DestroyLine();
                startedLine = false;
            }
        }
    }