diff --git a/Distribution/GameData/ConformalDecals/ConformalDecals.cfg b/Distribution/GameData/ConformalDecals/ConformalDecals.cfg new file mode 100644 index 0000000..72c6e59 --- /dev/null +++ b/Distribution/GameData/ConformalDecals/ConformalDecals.cfg @@ -0,0 +1,20 @@ +CONFORMALDECALS { + SHADERBLACKLIST { + shader = DepthMask + shader = KSP/Alpha/Cutoff + shader = KSP/Alpha/Cutoff Bumped + shader = KSP/Alpha/Translucent + shader = KSP/Alpha/Translucent Additive + shader = KSP/Alpha/Translucent Specular + shader = KSP/Alpha/Unlit Transparent + shader = KSP/Bumped Specular (Transparent) + shader = KSP/FX/ScrollingUnlit + shader = KSP/Particles/Additive + shader = KSP/Particles/Additive (Soft) + shader = KSP/Particles/Alpha Blended + shader = KSP/Particles/Alpha Blended Emissive Cutout + shader = KSP/Specular (Cutoff) + shader = KSP/Specular (Transparent) + shader = Solid Color (Alpha) + } +} \ No newline at end of file diff --git a/Distribution/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/Distribution/GameData/ConformalDecals/Plugins/ConformalDecals.dll index 5ec3080..74f65c1 100644 Binary files a/Distribution/GameData/ConformalDecals/Plugins/ConformalDecals.dll and b/Distribution/GameData/ConformalDecals/Plugins/ConformalDecals.dll differ diff --git a/Source/ConformalDecals/ConformalDecalConfig.cs b/Source/ConformalDecals/ConformalDecalConfig.cs new file mode 100644 index 0000000..7a0f27e --- /dev/null +++ b/Source/ConformalDecals/ConformalDecalConfig.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace ConformalDecals { + [KSPAddon(KSPAddon.Startup.Instantly, true)] + public class ConformalDecalConfig : MonoBehaviour { + private static List _shaderBlacklist; + + public static bool IsBlacklisted(Shader shader) { + return IsBlacklisted(shader.name); + } + + public static bool IsBlacklisted(string shaderName) { + return _shaderBlacklist.Contains(shaderName); + } + + private void ParseConfig(ConfigNode node) { + foreach (var blacklist in node.GetNodes("SHADERBLACKLIST")) { + foreach (var shaderName in blacklist.GetValuesList("shader")) { + _shaderBlacklist.Add(shaderName); + } + } + } + + private void Start() { + _shaderBlacklist = new List(); + + var configs = GameDatabase.Instance.GetConfigs("CONFORMALDECALS"); + + if (configs.Length > 0) { + Debug.Log("DecalConfig loading config"); + foreach (var config in configs) { + ParseConfig(config.config); + } + } + } + } +} \ No newline at end of file diff --git a/Source/ConformalDecals/ConformalDecals.csproj b/Source/ConformalDecals/ConformalDecals.csproj index 08a2aee..19a0c41 100644 --- a/Source/ConformalDecals/ConformalDecals.csproj +++ b/Source/ConformalDecals/ConformalDecals.csproj @@ -49,6 +49,7 @@ + diff --git a/Source/ConformalDecals/ModuleConformalDecal.cs b/Source/ConformalDecals/ModuleConformalDecal.cs index 2b341b3..9f3b91e 100644 --- a/Source/ConformalDecals/ModuleConformalDecal.cs +++ b/Source/ConformalDecals/ModuleConformalDecal.cs @@ -330,6 +330,12 @@ namespace ConformalDecals { foreach (var renderer in renderers) { // skip disabled renderers if (renderer.gameObject.activeInHierarchy == false) continue; + + // skip blacklisted shaders + if (ConformalDecalConfig.IsBlacklisted(renderer.material.shader)) { + this.Log($"Skipping blacklisted shader '{renderer.material.shader.name}' in '{renderer.gameObject.name}'"); + continue; + } var meshFilter = renderer.GetComponent(); if (meshFilter == null) continue; // object has a meshRenderer with no filter, invalid