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);
}