Exemplo n.º 1
0
        /// <summary>
        /// Installs a shader extension package of the provided shader family (when available).
        /// </summary>
        public static void InstallShaderExtension(string shaderFamily)
        {
            if (!IsShaderExtensionAvailable(shaderFamily))
            {
                Debug.LogError($"'{shaderFamily}' shader family is not available.");
                return;
            }

            if (IsShaderExtensionInstalled(shaderFamily))
            {
                RemoveShaderExtension(shaderFamily);
            }

            var extensionPackage = ExtensionSources.GetShaderExtensionByFamily(shaderFamily);
            var packagePath      = Path.Combine(PackagePath.ShaderExtensionsPath, extensionPackage.PackagePath);

            foreach (var file in extensionPackage.Files)
            {
                var filePath        = Path.Combine(packagePath, file.FilePath);
                var parentDirectory = Directory.GetParent(filePath).FullName;
                PackagePath.CreateDirectoryAsset(parentDirectory);
                File.WriteAllText(filePath, file.FileContent, Encoding.UTF8);
            }

            AssetDatabase.Refresh();
            UpdateShaderResources();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Installs a component extension package for the component of provided type (when available).
        /// </summary>
        public static void InstallComponentExtension(string extendedComponentType)
        {
            if (!IsComponentTypeSupported(extendedComponentType))
            {
                Debug.LogError(string.Format("'{0}' type is not supported.", extendedComponentType));
                return;
            }

            if (IsComponentExtensionForTypeInstalled(extendedComponentType))
            {
                RemoveComponentExtension(extendedComponentType);
            }

            var extensionPackage = ExtensionSources.GetComponentExtensionForType(extendedComponentType);
            var packagePath      = Path.Combine(PackagePath.ExtensionsPath, extensionPackage.PackagePath);

            foreach (var file in extensionPackage.Files)
            {
                var filePath        = Path.Combine(packagePath, file.FilePath);
                var parentDirectory = Directory.GetParent(filePath).FullName;
                PackagePath.CreateDirectoryAsset(parentDirectory);
                File.WriteAllText(filePath, file.FileContent, Encoding.UTF8);
            }

            AssetDatabase.Refresh();
        }
Exemplo n.º 3
0
        /// <summary>
        /// Loads the asset using <see cref="PackagePath.ExtensionSourcesAssetPath"/>.
        /// Will create the asset if it doesn't exist.
        /// </summary>
        public static ExtensionSources Load()
        {
            var assetPath         = PackagePath.ExtensionSourcesAssetPath;
            var relativeAssetPath = PackagePath.ToAssetsPath(assetPath);

            if (!File.Exists(assetPath))
            {
                var extensionSources = CreateInstance <ExtensionSources>();
                PackagePath.CreateDirectoryAsset(Path.GetDirectoryName(assetPath));
                AssetDatabase.CreateAsset(extensionSources, relativeAssetPath);
                AssetDatabase.SaveAssets();
                return(extensionSources);
            }
            else
            {
                return(AssetDatabase.LoadAssetAtPath <ExtensionSources>(relativeAssetPath));
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Adds references to all the currently installed shader extensions to the <see cref="ShaderResources"/> asset.
        /// Will create the resources asset if it doesn't exist.
        /// </summary>
        public static void UpdateShaderResources()
        {
            ShaderResources resources;

            if (!File.Exists(PackagePath.ShaderResourcesAssetPath))
            {
                resources = ScriptableObject.CreateInstance <ShaderResources>();
                PackagePath.CreateDirectoryAsset(Path.GetDirectoryName(PackagePath.ShaderResourcesAssetPath));
                AssetDatabase.CreateAsset(resources, PackagePath.ToAssetsPath(PackagePath.ShaderResourcesAssetPath));
                AssetDatabase.SaveAssets();
            }
            else
            {
                resources = ShaderResources.Load();
            }

            resources.RemoveAllShaders();

            var shaderPaths = Directory.GetFiles(PackagePath.ShaderExtensionsPath, "*.shader", SearchOption.AllDirectories).ToList();

            foreach (var additionalPath in resources.GetAdditionalPaths())
            {
                var fullPath = Path.GetFullPath(additionalPath);
                if (!Directory.Exists(fullPath))
                {
                    continue;
                }
                shaderPaths.AddRange(Directory.GetFiles(fullPath, "*.shader", SearchOption.AllDirectories));
            }
            foreach (var shaderPath in shaderPaths)
            {
                var relativeShaderPath = PackagePath.ToAssetsPath(shaderPath);
                var shader             = AssetDatabase.LoadAssetAtPath <Shader>(relativeShaderPath);
                if (IsValidShader(shader))
                {
                    resources.AddShader(shader);
                }
            }

            EditorUtility.SetDirty(resources);
            AssetDatabase.SaveAssets();
        }