private static void OnSavedPrefabAddedToScene(GameObject instance, AGXUnity.IO.SavedPrefabLocalData savedPrefabData)
        {
            if (savedPrefabData == null || savedPrefabData.DisabledGroups.Length == 0)
            {
                return;
            }

            Undo.SetCurrentGroupName("Adding prefab data for " + instance.name + " to scene.");
            var grouId = Undo.GetCurrentGroup();

            foreach (var disabledGroup in savedPrefabData.DisabledGroups)
            {
                TopMenu.GetOrCreateUniqueGameObject <CollisionGroupsManager>().SetEnablePair(disabledGroup.First, disabledGroup.Second, false);
            }
            Undo.CollapseUndoOperations(grouId);
        }
Exemplo n.º 2
0
        private static void OnAGXPrefabAdddedToScene(GameObject instance, IO.AGXFileInfo fileInfo)
        {
            if (fileInfo.ExistingPrefab == null)
            {
                Debug.LogWarning("Unable to load parent prefab from file: " + fileInfo.NameWithExtension);
                return;
            }

            Undo.SetCurrentGroupName("Adding: " + instance.name + " to scene.");
            var grouId = Undo.GetCurrentGroup();

            var contactMaterialManager = TopMenu.GetOrCreateUniqueGameObject <ContactMaterialManager>();

            Undo.RecordObject(contactMaterialManager, "Adding contact materials");
            foreach (var cm in IO.Utils.FindAssetsOfType <ContactMaterial>(fileInfo.DataDirectory))
            {
                contactMaterialManager.Add(cm);
            }

            var fileData = fileInfo.ExistingPrefab.GetComponent <AGXUnity.IO.RestoredAGXFile>();
            var collisionGroupsManager = TopMenu.GetOrCreateUniqueGameObject <CollisionGroupsManager>();

            Undo.RecordObject(collisionGroupsManager, "Adding disabled collision groups");
            foreach (var disabledPair in fileData.DisabledGroups)
            {
                collisionGroupsManager.SetEnablePair(disabledPair.First, disabledPair.Second, false);
            }

            var renderDatas = instance.GetComponentsInChildren <AGXUnity.Rendering.ShapeVisual>();

            Undo.RecordObjects(renderDatas, "Applying render data hide flags");
            foreach (var renderData in renderDatas)
            {
                renderData.hideFlags           |= HideFlags.NotEditable;
                renderData.transform.hideFlags |= HideFlags.NotEditable;
            }

            // TODO: Handle fileData.SolverSettings?

            Undo.CollapseUndoOperations(grouId);
        }
Exemplo n.º 3
0
        public static void OnPrefabAddedToScene(GameObject instance)
        {
            var fileInfo = new IO.AGXFileInfo(instance);

            if (!fileInfo.IsValid || fileInfo.Type != IO.AGXFileInfo.FileType.AGXPrefab)
            {
                return;
            }

            if (fileInfo.ExistingPrefab == null)
            {
                Debug.LogWarning("Unable to load parent prefab from file: " + fileInfo.NameWithExtension);
                return;
            }

            Undo.SetCurrentGroupName("Adding: " + instance.name + " to scene.");
            var grouId = Undo.GetCurrentGroup();

            foreach (var cm in fileInfo.GetAssets <ContactMaterial>())
            {
                TopMenu.GetOrCreateUniqueGameObject <ContactMaterialManager>().Add(cm);
            }

            var fileData = fileInfo.ExistingPrefab.GetComponent <AGXUnity.IO.RestoredAGXFile>();

            AddDisabledPairsToManager(fileData.DisabledGroups);

            var renderDatas = instance.GetComponentsInChildren <AGXUnity.Rendering.ShapeVisual>();

            foreach (var renderData in renderDatas)
            {
                renderData.hideFlags           |= HideFlags.NotEditable;
                renderData.transform.hideFlags |= HideFlags.NotEditable;
            }

            Undo.CollapseUndoOperations(grouId);
        }
Exemplo n.º 4
0
        private static void OnHierarchyWindowChanged()
        {
            var scene = UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene();

            if (scene.name != m_currentSceneName)
            {
                EditorData.Instance.GC();

                m_currentSceneName = scene.name;

                // - Verifies so that our shapes doesn't have multiple debug rendering components.
                // - Verifies version of OnSelectionProxy and patches it if Target == null.
                AGXUnity.Collide.Shape[] shapes = UnityEngine.Object.FindObjectsOfType <AGXUnity.Collide.Shape>();
                foreach (var shape in shapes)
                {
                    OnSelectionProxy selectionProxy = shape.GetComponent <OnSelectionProxy>();
                    if (selectionProxy != null && selectionProxy.Target == null)
                    {
                        selectionProxy.Component = shape;
                    }

                    AGXUnity.Rendering.ShapeDebugRenderData[] data = shape.GetComponents <AGXUnity.Rendering.ShapeDebugRenderData>();
                    if (data.Length > 1)
                    {
                        Debug.Log("Shape has several ShapeDebugRenderData. Removing/resetting.", shape);
                        foreach (var instance in data)
                        {
                            Component.DestroyImmediate(instance);
                        }
                        data = null;
                    }
                }

                // Verifying shape visuals material.
                {
                    AGXUnity.Rendering.ShapeVisual[] shapeVisuals = UnityEngine.Object.FindObjectsOfType <AGXUnity.Rendering.ShapeVisual>();
                    foreach (var shapeVisual in shapeVisuals)
                    {
                        var renderers = shapeVisual.GetComponentsInChildren <MeshRenderer>();
                        foreach (var renderer in renderers)
                        {
                            if (renderer.sharedMaterial == null)
                            {
                                renderer.sharedMaterial = GetOrCreateShapeVisualDefaultMaterial();

                                Debug.Log("Shape visual with null material. Assigning default.", shapeVisual);

                                if (!EditorApplication.isPlaying)
                                {
                                    UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(scene);
                                }
                            }
                        }
                    }
                }
            }
            else if (Selection.activeGameObject != null)
            {
                if (Selection.activeGameObject.GetComponent <AGXUnity.IO.RestoredAGXFile>() != null)
                {
                    AssetPostprocessorHandler.OnPrefabAddedToScene(Selection.activeGameObject);
                }

                var savedPrefabData = Selection.activeGameObject.GetComponent <AGXUnity.IO.SavedPrefabLocalData>();
                if (savedPrefabData != null && savedPrefabData.DisabledGroups.Length > 0)
                {
                    Undo.SetCurrentGroupName("Adding prefab data for " + Selection.activeGameObject.name + " to scene.");
                    var grouId = Undo.GetCurrentGroup();
                    foreach (var disabledGroup in savedPrefabData.DisabledGroups)
                    {
                        TopMenu.GetOrCreateUniqueGameObject <AGXUnity.CollisionGroupsManager>().SetEnablePair(disabledGroup.First, disabledGroup.Second, false);
                    }
                    Undo.CollapseUndoOperations(grouId);
                }
            }
        }