public override int UserAABBOverlap(ContactMaterial material, Body body0, Body body1, int threadIndex) { Vector3[] contactPoints; Vector3[] contactNormals; float[] contactPenetration; if (MogreNewt.CollisionTool.CollisionCollide( Engine.Singleton.NewtonWorld, 2, body0.Collision, body0.Orientation, body0.Position, body1.Collision, body1.Orientation, body1.Position, out contactPoints, out contactNormals, out contactPenetration, threadIndex) != 0) { if (body0.UserData is TriggerVolume) { TriggerVolume triggerVolume = body0.UserData as TriggerVolume; triggerVolume.HandleGameObject((Character)body1.UserData); } else { TriggerVolume triggerVolume = body1.UserData as TriggerVolume; triggerVolume.HandleGameObject((Character)body0.UserData); } } return(0); }
public override int UserAABBOverlap(ContactMaterial material, Body body0, Body body1, int threadIndex) { Vector3[] contactPoints; Vector3[] contactNormals; float[] contactPenetration; if (MogreNewt.CollisionTool.CollisionCollide( Engine.Singleton.NewtonWorld, 2, body0.Collision, body0.Orientation, body0.Position, body1.Collision, body1.Orientation, body1.Position, out contactPoints, out contactNormals, out contactPenetration, threadIndex) != 0) { if (body0.UserData != body1.UserData) { if (body0.UserData is Character && body0.MaterialGroupID == Engine.Singleton.MaterialManager.CharacterSensorMaterialID) { Character character = body0.UserData as Character; character.Contacts.Add(body1.UserData as GameObject); } else { Character character = body1.UserData as Character; character.Contacts.Add(body0.UserData as GameObject); } } } return(0); }
private void OnContactMaterialsList() { var skin = InspectorEditor.Skin; ContactMaterial contactMaterialToAdd = null; ContactMaterial contactMaterialToRemove = null; GUILayout.Label(GUI.MakeLabel("Contact Material Manager", 18, true), new GUIStyle(skin.label) { alignment = TextAnchor.MiddleCenter }); GUILayout.Space(4); GUILayout.Label(GUI.MakeLabel("Drag and drop contact materials into the list below to add/enable the contact material in the simulation."), new GUIStyle(skin.textArea) { alignment = TextAnchor.MiddleCenter }); GUILayout.Space(4); GUI.Separator3D(); GUILayout.BeginVertical(); { if (GUI.Foldout(FoldoutDataEntry, GUI.MakeLabel("Contact Materials [" + Manager.ContactMaterialEntries.Length + "]"), skin)) { var contactMaterials = Manager.ContactMaterials; using (new GUI.Indent(12)) { foreach (var contactMaterial in contactMaterials) { GUI.Separator(); bool foldoutActive = false; GUILayout.BeginHorizontal(); { foldoutActive = GUI.Foldout(EditorData.Instance.GetData(Manager, contactMaterial.name + "_" + contactMaterial.GetInstanceID().ToString()), GUI.MakeLabel(contactMaterial.name), skin); using (GUI.NodeListButtonColor) if (GUILayout.Button(GUI.MakeLabel(GUI.Symbols.ListEraseElement.ToString(), false, "Erase this element"), skin.button, new GUILayoutOption[] { GUILayout.Width(20), GUILayout.Height(14) })) { contactMaterialToRemove = contactMaterial; } } GUILayout.EndHorizontal(); if (foldoutActive) { using (new GUI.Indent(12)) InspectorEditor.DrawMembersGUI(new Object[] { contactMaterial }); } } } } } GUILayout.EndVertical(); // Note that GetLastRect is used here and it's expecting the begin/end vertical rect. GUI.HandleDragDrop <ContactMaterial>(GUILayoutUtility.GetLastRect(), Event.current, (contactMaterial) => { contactMaterialToAdd = contactMaterial; }); GUI.Separator(); GUILayout.BeginHorizontal(); { GUILayout.Label(GUI.MakeLabel("Add:"), skin.label); contactMaterialToAdd = EditorGUILayout.ObjectField(null, typeof(ContactMaterial), false) as ContactMaterial ?? contactMaterialToAdd; } GUILayout.EndHorizontal(); GUI.Separator3D(); if (contactMaterialToAdd != null) { Manager.Add(contactMaterialToAdd); FoldoutDataEntry.Bool = true; } if (contactMaterialToRemove != null) { Manager.Remove(contactMaterialToRemove); } }
public override int UserAABBOverlap(ContactMaterial material, Body body0, Body body1, int threadIndex) { return(0); }
public override int UserAABBOverlap(ContactMaterial material, Body body0, Body body1, int threadIndex) { return 0; }