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(); } }