public void CopyTracker(Slice2D slice, Slicer2D slicer)
 {
     foreach (Demo10LinearTrackedSlicer trackerComponent in Object.FindObjectsOfType <Demo10LinearTrackedSlicer>())
     {
         if (trackerComponent.trackerObject == this)
         {
             continue;
         }
         foreach (LinearSlicerTrackerObject trackerObject in new List <LinearSlicerTrackerObject>(trackerComponent.trackerObject.trackerList))
         {
             if (trackerObject.slicer != slicer)
             {
                 continue;
             }
             foreach (GameObject g in slice.gameObjects)
             {
                 LinearSlicerTrackerObject t = trackerComponent.trackerObject.GetSlicerTracker(g.GetComponent <Slicer2D>());
                 if (t == null)
                 {
                     t               = new LinearSlicerTrackerObject();
                     t.slicer        = g.GetComponent <Slicer2D>();
                     t.firstPosition = trackerObject.firstPosition;
                     t.lastPosition  = trackerObject.lastPosition;
                     t.tracking      = true;
                     trackerComponent.trackerObject.trackerList.Add(t);
                 }
             }
         }
     }
 }
    public void Update(Vector2 position, float minVertexDistance = 1f)
    {
        foreach (Slicer2D slicer in Slicer2D.GetList())
        {
            LinearSlicerTrackerObject tracker = GetSlicerTracker(slicer);
            if (tracker == null)
            {
                tracker        = new LinearSlicerTrackerObject();
                tracker.slicer = slicer;
                trackerList.Add(tracker);
            }

            Vector2D trackedPos = new Vector2D(slicer.transform.transform.InverseTransformPoint(position));
            if (tracker.lastPosition != null)
            {
                if (slicer.GetPolygon().PointInPoly(trackedPos))
                {
                    if (tracker.tracking == false)
                    {
                        //tracker.pointsList.Add(tracker.lastPosition);
                        tracker.firstPosition = tracker.lastPosition;
                    }

                    tracker.tracking = true;

                    //if (tracker.pointsList.Count < 1 || (Vector2D.Distance (trackedPos, tracker.pointsList.Last ()) > minVertexDistance / 4f)) {
                    //	tracker.pointsList.Add(trackedPos);
                    //}
                }
                else if (tracker.tracking == true)
                {
                    tracker.tracking = false;
                    //tracker.pointsList.Add(trackedPos);

                    if (tracker.firstPosition != null)
                    {
                        tracker.lastPosition = trackedPos;

                        Pair2D slicePair = new Pair2D(new Vector2D(slicer.transform.TransformPoint(tracker.firstPosition.ToVector2())), new Vector2D(slicer.transform.TransformPoint(tracker.lastPosition.ToVector2())));


                        Slice2D slice = slicer.LinearSlice(slicePair);
                        if (slice.gameObjects.Count > 0)
                        {
                            CopyTracker(slice, slicer);
                        }
                        ;
                    }

                    trackerList.Remove(tracker);
                }
            }

            if (tracker != null)
            {
                tracker.lastPosition = trackedPos;
            }
        }
    }