Fix depth mask module with transparent shaders and part variants

pull/630/head^2
Andrew Cassidy 5 years ago
parent 7a154de62f
commit ec71ee0019
No known key found for this signature in database
GPG Key ID: 963017B38FD477A1

@ -15,11 +15,11 @@ namespace Restock
// The render queue value for the mesh, should be less than maskRenderQueue // The render queue value for the mesh, should be less than maskRenderQueue
[KSPField] [KSPField]
public int meshRenderQueue = 1800; public int meshRenderQueue = 1000;
// the render queue value for the mask, should be less than 2000 // the render queue value for the mask, should be less than 2000
[KSPField] [KSPField]
public int maskRenderQueue = 1900; public int maskRenderQueue = 1999;
// depth mask object transform // depth mask object transform
public Transform depthMask; public Transform depthMask;
@ -27,6 +27,18 @@ namespace Restock
// depth mask shader object // depth mask shader object
public Shader depthShader; public Shader depthShader;
public override void OnStart(StartState state)
{
base.OnStart(state);
GameEvents.onVariantApplied.Add(OnVariantApplied);
}
private void OnDestroy()
{
GameEvents.onVariantApplied.Remove(OnVariantApplied);
}
public override void OnLoad(ConfigNode node) public override void OnLoad(ConfigNode node)
{ {
@ -34,22 +46,31 @@ namespace Restock
//if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) return; //if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) return;
if (!(base.part.FindModelTransform(maskTransform) is Transform depthMask)) this.depthMask = base.part.FindModelTransform(maskTransform);
if (!(this.depthMask is Transform))
{ {
this.LogError($"Can't find transform {maskTransform}"); this.LogError($"Can't find transform {maskTransform}");
return; return;
} }
else
{
this.Log($"found mask transform {maskTransform}"); this.depthShader = Shader.Find(shaderName);
} if (!(this.depthShader is Shader))
if (!(Shader.Find(shaderName) is Shader depthShader))
{ {
this.LogError($"Can't find shader {shaderName}"); this.LogError($"Can't find shader {shaderName}");
return; return;
} }
UpdatematerialQueue();
}
public void OnVariantApplied(Part appliedPart, PartVariant variant)
{
if (appliedPart == this.part) UpdatematerialQueue();
}
private void UpdatematerialQueue()
{
var windowRenderer = depthMask.GetComponent<MeshRenderer>(); var windowRenderer = depthMask.GetComponent<MeshRenderer>();
@ -64,8 +85,11 @@ namespace Restock
foreach (var renderer in meshRenderers) foreach (var renderer in meshRenderers)
{ {
this.Log(renderer.material.name + " " + renderer.material.renderQueue.ToString());
if (renderer == windowRenderer) continue; if (renderer == windowRenderer) continue;
renderer.material.renderQueue = meshRenderQueue; var queue = renderer.material.renderQueue;
queue = meshRenderQueue + ((queue - 2000) / 2);
renderer.material.renderQueue = queue;
} }
} }

Loading…
Cancel
Save