internal static EnvironmentState ConfigureEnvironment() { #if AGXUNITY_UPDATING Debug.LogWarning("AGX Dynamics for Unity is currently updating..."); return(EnvironmentState.Updating); #else // WARNING INFO: // Unity 2018, 2019: AGX Dynamics for Unity compiles but undefined behavior // in players with API compatibility @ .NET Standard 2.0. // Unity 2017: AGX Dynamics for Unity won't compile due to if (PlayerSettings.GetApiCompatibilityLevel(BuildTargetGroup.Standalone) != ApiCompatibilityLevel.NET_4_6) { Debug.LogWarning(AGXUnity.Utils.GUI.AddColorTag("<b>WARNING:</b> ", Color.yellow) + "AGX Dynamics for Unity requires .NET API compatibility level: .NET 4.x.\n" + "<b>Edit -> Project Settings... -> Player -> Other Settings -> Configuration -> Api Compatibility Level -> .NET 4.x</b>"); } // Running from within the editor - two options: // 1. Unity has been started from an AGX environment => do nothing. // 2. AGX Dynamics dll's are present in the plugins directory => setup // environment file paths. var binariesInProject = IO.Utils.AGXDynamicsInstalledInProject; if (binariesInProject) { // This is necessary when e.g., terrain dynamically loads dll's. AGXUnity.IO.Environment.AddToPath(IO.Utils.AGXUnityPluginDirectoryFull); try { AGXUnity.NativeHandler.Instance.Register(null); } catch (TypeInitializationException) { var lastRequestData = GetRequestScriptReloadData(); if ((float)EditorApplication.timeSinceStartup - lastRequestData.Float > 1.0f) { lastRequestData.Float = (float)EditorApplication.timeSinceStartup; #if UNITY_2019_3_OR_NEWER Debug.LogWarning("AGX Dynamics binaries aren't properly loaded into Unity - requesting Unity to reload assemblies..."); EditorUtility.RequestScriptReload(); #else Debug.LogWarning("AGX Dynamics binaries aren't properly loaded into Unity - restart Unity manually."); #endif } return(EnvironmentState.Uninitialized); } catch (Exception e) { Debug.LogException(e); return(EnvironmentState.Uninitialized); } if (!AGXUnity.IO.Environment.IsSet(AGXUnity.IO.Environment.Variable.AGX_DIR)) { AGXUnity.IO.Environment.Set(AGXUnity.IO.Environment.Variable.AGX_DIR, IO.Utils.AGXUnityPluginDirectoryFull); } if (!AGXUnity.IO.Environment.IsSet(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH)) { AGXUnity.IO.Environment.Set(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH, IO.Utils.AGXUnityPluginDirectoryFull + Path.DirectorySeparatorChar + "agx"); } var envInstance = agxIO.Environment.instance(); for (int i = 0; i < (int)agxIO.Environment.Type.NUM_TYPES; ++i) { envInstance.getFilePath((agxIO.Environment.Type)i).clear(); } envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath("."); envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(IO.Utils.AGXUnityPluginDirectoryFull); envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(AGXUnity.IO.Environment.Get(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH)); envInstance.getFilePath(agxIO.Environment.Type.RUNTIME_PATH).pushbackPath(AGXUnity.IO.Environment.Get(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH)); } else { ExternalAGXInitializer.Initialize(); } // This validate is only for "license status" window so // the user will be noticed when something is wrong. try { AGXUnity.NativeHandler.Instance.ValidateLicense(); if (EditorSettings.Instance.AGXDynamics_LogEnabled && !string.IsNullOrEmpty(EditorSettings.Instance.AGXDynamics_LogPath.Trim())) { agx.Logger.instance().openLogfile(EditorSettings.Instance.AGXDynamics_LogPath.Trim(), true, true); } } catch (Exception) { return(EnvironmentState.Uninitialized); } return(EnvironmentState.Initialized); #endif }
internal static EnvironmentState ConfigureEnvironment() { #if AGXUNITY_UPDATING Debug.LogWarning("AGX Dynamics for Unity is currently updating..."); return(EnvironmentState.Updating); #else // WARNING INFO: // Unity 2018, 2019: AGX Dynamics for Unity compiles but undefined behavior // in players with API compatibility @ .NET Standard 2.0. // Unity 2017: AGX Dynamics for Unity won't compile due to if (PlayerSettings.GetApiCompatibilityLevel(BuildTargetGroup.Standalone) != ApiCompatibilityLevel.NET_4_6) { Debug.LogWarning(AGXUnity.Utils.GUI.AddColorTag("<b>WARNING:</b> ", Color.yellow) + "AGX Dynamics for Unity requires .NET API compatibility level: .NET 4.x.\n" + "<b>Edit -> Project Settings... -> Player -> Other Settings -> Configuration -> Api Compatibility Level -> .NET 4.x</b>"); } // Running from within the editor - two options: // 1. Unity has been started from an AGX environment => do nothing. // 2. AGX Dynamics dll's are present in the plugins directory => setup // environment file paths. var binariesInProject = IO.Utils.AGXDynamicsInstalledInProject; if (binariesInProject) { // This is necessary when e.g., terrain dynamically loads dll's. AGXUnity.IO.Environment.AddToPath(IO.Utils.AGXUnityPluginDirectoryFull); var initSuccess = false; try { AGXUnity.NativeHandler.Instance.Register(null); initSuccess = true; } catch (Exception) { } if (!HandleScriptReload(initSuccess)) { return(EnvironmentState.Uninitialized); } if (!AGXUnity.IO.Environment.IsSet(AGXUnity.IO.Environment.Variable.AGX_DIR)) { AGXUnity.IO.Environment.Set(AGXUnity.IO.Environment.Variable.AGX_DIR, IO.Utils.AGXUnityPluginDirectoryFull); } if (!AGXUnity.IO.Environment.IsSet(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH)) { AGXUnity.IO.Environment.Set(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH, IO.Utils.AGXUnityPluginDirectoryFull + Path.DirectorySeparatorChar + "agx"); } var envInstance = agxIO.Environment.instance(); for (int i = 0; i < (int)agxIO.Environment.Type.NUM_TYPES; ++i) { envInstance.getFilePath((agxIO.Environment.Type)i).clear(); } // Adding Plugins/x86_64/agx to RESOURCE_PATH (for additional data) and // to RUNTIME_PATH (for entities and components). The license file is // searched for by the license manager. var dataAndRuntimePath = AGXUnity.IO.Environment.Get(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH); envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(dataAndRuntimePath); envInstance.getFilePath(agxIO.Environment.Type.RUNTIME_PATH).pushbackPath(dataAndRuntimePath); } // Check if user would like to initialize AGX Dynamics with an // installed (or Algoryx developer) version. else { if (!HandleScriptReload(ExternalAGXInitializer.Initialize())) { return(EnvironmentState.Uninitialized); } } // This validate is only for "license status" window so // the user will be noticed when something is wrong. try { AGXUnity.LicenseManager.LoadFile(); AGXUnity.NativeHandler.Instance.ValidateLicense(); if (EditorSettings.Instance.AGXDynamics_LogEnabled && !string.IsNullOrEmpty(EditorSettings.Instance.AGXDynamics_LogPath.Trim())) { agx.Logger.instance().openLogfile(EditorSettings.Instance.AGXDynamics_LogPath.Trim(), true, true); } } catch (Exception) { return(EnvironmentState.Uninitialized); } return(EnvironmentState.Initialized); #endif }