AcManager.Tools.Miscellaneous.Fixes.FixMissingKsSkyBoxShader C# (CSharp) Method

FixMissingKsSkyBoxShader() public static method

public static FixMissingKsSkyBoxShader ( string filename, CancellationToken cancellation ) : Task
filename string
cancellation System.Threading.CancellationToken
return Task
        public static Task FixMissingKsSkyBoxShader(string filename, CancellationToken cancellation) {
            return Task.Run(() => {
                var backup = FileUtils.EnsureUnique(filename + @".bak");
                File.Move(filename, backup);
                cancellation.ThrowIfCancellationRequested();

                var kn5 = Kn5.FromFile(backup);
                cancellation.ThrowIfCancellationRequested();

                var changed = false;
                foreach (var material in kn5.Materials.Values) {
                    if (material.ShaderName == @"ksSkyBox") {
                        material.ShaderName = @"ksSky";
                        material.TextureMappings = new Kn5Material.TextureMapping[0];
                        changed = true;
                    }
                }

                if (!changed) {
                    throw new InformativeException("Nothing to fix", "None of materials is using ksSkyBox shader");
                }

                cancellation.ThrowIfCancellationRequested();
                kn5.Save(filename);
            }, cancellation); 
        }