Пример #1
0
        public static void ChangeRootDirectory(DirectoryInfo newAgxDir)
        {
            var type = FindType(newAgxDir);

            if (type == AGXDirectoryType.Unknown)
            {
                return;
            }

            Environment.Set(Environment.Variable.AGX_DIR, "");
            Environment.Set(Environment.Variable.AGX_PLUGIN_PATH, "");
            foreach (var path in Instance.AGX_BIN_PATH)
            {
                Environment.RemoveFromPath(path);
            }

            Instance.Clear();

            EditorUtility.SetDirty(Instance);
            AssetDatabase.SaveAssets();

            var success = false;

            if (type == AGXDirectoryType.Checkout)
            {
                success = Instance.InitializeCheckout(newAgxDir.FullName);
            }
            else
            {
                success = Instance.InitializeInstalled(newAgxDir.FullName);
            }

            if (success)
            {
                EditorUtility.SetDirty(Instance);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
                EditorApplication.OpenProject(Path.Combine(Application.dataPath, ".."));
            }
        }
Пример #2
0
        public bool ApplyData()
        {
            IsApplied = true;

            Environment.Set(Environment.Variable.AGX_DIR, AGX_DIR);
            Environment.Set(Environment.Variable.AGX_PLUGIN_PATH, AGX_PLUGIN_PATH);
            foreach (var path in AGX_BIN_PATH)
            {
                Environment.AddToPath(path);
            }

            // All binaries should be in path, try initialize agx.
            try {
                AGXUnity.NativeHandler.Instance.Register(null);
            }
            catch (TypeInitializationException) {
                Debug.LogError($"{"ERROR".Color( Color.red )}: Missing dll.");
                return(false);
            }

            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(AGX_DIR);
            envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(AGX_PLUGIN_PATH);
            envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(AGX_DATA_DIR);
            envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(AGX_DATA_DIR +
                                                                                       Path.DirectorySeparatorChar +
                                                                                       "cfg");
            envInstance.getFilePath(agxIO.Environment.Type.RUNTIME_PATH).pushbackPath(AGX_PLUGIN_PATH);

            return(true);
        }
Пример #3
0
        public static bool Initialize()
        {
            // Dependencies dir set and we're certain setup_env has been executed.
            if (Environment.IsSet(Environment.Variable.AGX_DEPENDENCIES_DIR))
            {
                return(true);
            }

            var instance = Instance;

            // Applying already initialized data.
            if (instance.HasData &&
                instance.ApplyData())
            {
                return(true);
            }

            IsApplied = false;

            UserSaidNo = UserSaidNo ||
                         !EditorUtility.DisplayDialog("Configure AGX Dynamics",
                                                      "AGX Dynamics binaries and data isn't found - would you " +
                                                      "like to manually select AGX Dynamics root directory?\n\n" +
                                                      "The selected directory may be changed to another under " +
                                                      "AGXUnity -> Settings...",
                                                      "Yes", "No");
            if (UserSaidNo)
            {
                return(true);
            }

            var agxDir = EditorUtility.OpenFolderPanel("AGX Dynamics root directory",
                                                       "Assets",
                                                       "").Replace('/', '\\');

            if (string.IsNullOrEmpty(agxDir))
            {
                UserSaidNo = true;
                return(false);
            }

            var type    = FindType(new DirectoryInfo(agxDir));
            var success = false;

            if (type == AGXDirectoryType.Unknown)
            {
                Debug.Log($"{"ERROR".Color( Color.red )}: Unable to determine directory type as installed or checked out AGX.");
                return(false);
            }
            else if (type == AGXDirectoryType.Checkout)
            {
                success = instance.InitializeCheckout(agxDir);
            }
            else if (type == AGXDirectoryType.Installed)
            {
                success = instance.InitializeInstalled(agxDir);
            }

            if (success)
            {
                instance.ApplyData();
            }
            else
            {
                instance.Clear();
            }

            EditorUtility.SetDirty(instance);
            AssetDatabase.SaveAssets();

            return(success);
        }