コード例 #1
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 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);
            }
コード例 #2
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);
            }
コード例 #3
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);
            }
        }
コード例 #4
0
 public override int UserAABBOverlap(ContactMaterial material, Body body0, Body body1, int threadIndex)
 {
     return(0);
 }
コード例 #5
0
 public override int UserAABBOverlap(ContactMaterial material, Body body0, Body body1, int threadIndex)
 {
     return 0;
 }