private static void HandleSimulationStepMode(Scene scene, Simulation simulation, IO.Utils.YamlObject script) { if (!script.Fields.ContainsKey("m_enableAutomaticStepping")) { return; } var enableAutoStepping = true; script.Fields["m_enableAutomaticStepping"].TryGet(out enableAutoStepping); simulation.AutoSteppingMode = enableAutoStepping ? Simulation.AutoSteppingModes.FixedUpdate : Simulation.AutoSteppingModes.Disabled; UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(scene); }
private static void HandleSolverSettings(Scene scene, Simulation simulation, IO.Utils.YamlObject script) { var isUpToDate = !script.Fields.ContainsKey("m_warmStartingDirectContacts"); // Flag scene dirty when we have the old version in the file. if (!isUpToDate) { UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(scene); } if (simulation.SolverSettings != null || isUpToDate) { return; } var warmStartingContacts = false; var numRestingIterations = -1; var numDryFrictionIterations = -1; try { if (!script.Fields["m_warmStartingDirectContacts"].TryGet(out warmStartingContacts)) { warmStartingContacts = false; } if (!script.Fields["m_numRestingIterations"].TryGet(out numRestingIterations)) { numRestingIterations = -1; } if (!script.Fields["m_numDryFrictionIterations"].TryGet(out numDryFrictionIterations)) { numDryFrictionIterations = -1; } } catch (System.Exception) { return; } // Ignore if default values were used. if (warmStartingContacts == false && numRestingIterations < 0 && numDryFrictionIterations < 0) { return; } var createSettings = EditorUtility.DisplayDialog("Solver settings asset", "Solver settings moved from Simulation to SolverSettings asset.\n\nCreate new solver settings asset with previous values?", "Yes", "No"); if (!createSettings) { return; } var path = EditorUtility.SaveFilePanel("Create new Solver Settings", "Assets", "solver settings.asset", "asset"); if (path == string.Empty) { return; } var info = new FileInfo(path); var relPath = IO.Utils.MakeRelative(path, Application.dataPath); var solverSettings = AGXUnity.ScriptAsset.Create <AGXUnity.SolverSettings>(); solverSettings.name = info.Name; AssetDatabase.CreateAsset(solverSettings, relPath + (info.Extension == ".asset" ? "" : ".asset")); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); solverSettings.WarmStartDirectContacts = warmStartingContacts; if (numRestingIterations >= 0) { solverSettings.RestingIterations = numRestingIterations; } if (numDryFrictionIterations >= 0) { solverSettings.DryFrictionIterations = numDryFrictionIterations; } simulation.SolverSettings = solverSettings; }