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