public Vector3 GetCorrectedContactPoint(Frame frame, bool mirrored)
        {
            Collider collider = null;
            Vector3  point    = DetectCollision(frame, mirrored, Edit, GetPivot(frame, mirrored), Tolerance + Threshold, out collider);

            if (collider != null)
            {
                Interaction annotated = collider.GetComponentInParent <Interaction>();
                if (annotated != null)
                {
                    if (annotated.ContainsContact(GetName()))
                    {
                        point = annotated.GetContact(GetName(), frame, mirrored).GetPosition();
                    }
                    // Transform t = annotated.GetContactTransform(GetName());
                    // if(t != null) {
                    //  if(mirrored) {
                    //      point = t.parent.position + t.parent.rotation * Vector3.Scale(t.parent.lossyScale.GetMirror(Module.Data.MirrorAxis), t.localPosition);
                    //  } else {
                    //      point = t.position;
                    //  }
                    // }
                }
                BakedContacts baked = collider.GetComponentInParent <BakedContacts>();
                if (baked != null)
                {
                    return(baked.GetContactPoint(GetName(), frame, mirrored));
                }
            }
            return(point);
        }
 protected override void DerivedInspector(MotionEditor editor)
 {
     if (Utility.GUIButton("Capture Contacts", UltiDraw.DarkGrey, UltiDraw.White))
     {
         EditorCoroutines.StartCoroutine(CaptureContacts(editor), this);
     }
     EditorGUILayout.BeginHorizontal();
     BakedContacts = (BakedContacts)EditorGUILayout.ObjectField(BakedContacts, typeof(BakedContacts), true);
     EditorGUI.BeginDisabledGroup(BakedContacts == null || editor.Mirror);
     if (Utility.GUIButton("Bake", UltiDraw.DarkGrey, UltiDraw.White))
     {
         BakeContacts(editor);
     }
     EditorGUI.EndDisabledGroup();
     EditorGUILayout.EndHorizontal();
     DrawScale                 = EditorGUILayout.FloatField("Draw Scale", DrawScale);
     EditMotion                = EditorGUILayout.Toggle("Edit Motion", EditMotion);
     ShowDebug                 = EditorGUILayout.Toggle("Show Debug", ShowDebug);
     ShowSensors               = EditorGUILayout.Toggle("Show Sensors", ShowSensors);
     ShowTolerances            = EditorGUILayout.Toggle("Show Tolerances", ShowTolerances);
     ShowDistances             = EditorGUILayout.Toggle("Show Distances", ShowDistances);
     TrueMotionTrajectory      = EditorGUILayout.Toggle("True Motion Trajectory", TrueMotionTrajectory);
     CorrectedMotionTrajectory = EditorGUILayout.Toggle("Corrected Motion Trajectory", CorrectedMotionTrajectory);
     PastTrajectoryWindow      = EditorGUILayout.FloatField("Past Trajectory Window", PastTrajectoryWindow);
     FutureTrajectoryWindow    = EditorGUILayout.FloatField("Future Trajectory Window", FutureTrajectoryWindow);
     //ShowSkeletons = EditorGUILayout.Toggle("Show Skeletons", ShowSkeletons);
     //SkeletonStep = EditorGUILayout.IntField("Skeleton Step", SkeletonStep);
     ShowContacts        = EditorGUILayout.Toggle("Show Contacts", ShowContacts);
     ContactTrajectories = EditorGUILayout.Toggle("Contact Trajectories", ContactTrajectories);
     Step          = EditorGUILayout.IntField("Step", Step);
     CaptureFilter = EditorGUILayout.Slider("Capture Filter", CaptureFilter, 0f, 1f);
     EditFilter    = EditorGUILayout.Slider("Edit Filter", EditFilter, 0f, 1f);
     for (int i = 0; i < Sensors.Length; i++)
     {
         EditorGUILayout.BeginHorizontal();
         Sensors[i].Inspector(editor);
         EditorGUILayout.BeginVertical();
         if (Utility.GUIButton("-", UltiDraw.DarkRed, UltiDraw.White, 28f, 18f))
         {
             RemoveSensor(Sensors[i]);
         }
         EditorGUILayout.EndVertical();
         EditorGUILayout.EndHorizontal();
     }
     if (Utility.GUIButton("+", UltiDraw.DarkGrey, UltiDraw.White))
     {
         AddSensor();
     }
 }