Fix body transform support and some cleaning up

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

@ -3,11 +3,11 @@ using UnityEngine.Serialization;
namespace Restock namespace Restock
{ {
public class ModuleRestockDepthMask: PartModule public class ModuleRestockDepthMask : PartModule
{ {
// The name of the transform that has your mask mesh. The only strictly required property // The name of the transform that has your mask mesh. The only strictly required property
[KSPField] [KSPField]
public string maskTransform= ""; public string maskTransform = "";
[KSPField] [KSPField]
public string bodyTransform = ""; public string bodyTransform = "";
@ -19,40 +19,47 @@ 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 = 1000; 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 = 1999; public int maskRenderQueue = 1999;
// depth mask object transform // depth mask object transform
public Transform depthMask; public Transform maskTransformObject;
// body object transform
public Transform bodyTransformObject;
public Transform bodyRoot;
// depth mask shader object // depth mask shader object
public Shader depthShader; public Shader depthShader;
public override void OnStart(StartState state) public override void OnStart(StartState state)
{ {
base.OnStart(state); base.OnStart(state);
UpdatematerialQueue();
// the part variant system is implemented extremely stupidly
// so we have to make this whole module more complicated as a result
GameEvents.onVariantApplied.Add(OnVariantApplied); GameEvents.onVariantApplied.Add(OnVariantApplied);
} }
private void OnDestroy() private void OnDestroy()
{ {
GameEvents.onVariantApplied.Remove(OnVariantApplied); GameEvents.onVariantApplied.Remove(OnVariantApplied);
} }
public override void OnLoad(ConfigNode node) public override void OnLoad(ConfigNode node)
{ {
base.OnLoad(node); base.OnLoad(node);
if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) return; if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) return;
this.depthMask = base.part.FindModelTransform(maskTransform); this.maskTransformObject = base.part.FindModelTransform(maskTransform);
if (!(this.depthMask is Transform)) if (this.maskTransformObject == null)
{ {
this.LogError($"Can't find transform {maskTransform}"); this.LogError($"Can't find transform {maskTransform}");
return; return;
@ -60,47 +67,43 @@ namespace Restock
if (bodyTransform == "") if (bodyTransform == "")
{ {
bodyRoot = base.part.partTransform; this.bodyTransformObject = base.part.partTransform;
} }
else else
{ {
this.bodyRoot = base.part.partTransform.Find(bodyTransform); this.bodyTransformObject = base.part.FindModelTransform(bodyTransform);
if (!(this.bodyRoot is Transform)) if (this.bodyTransformObject == null)
{ {
this.LogError($"Can't find transform {bodyTransform}"); this.LogError($"Can't find transform {bodyTransform}");
return; this.bodyTransformObject = base.part.partTransform;
} }
} }
this.depthShader = Shader.Find(shaderName); this.depthShader = Shader.Find(shaderName);
if (!(this.depthShader is Shader)) if (this.depthShader == null)
{ {
this.LogError($"Can't find shader {shaderName}"); this.LogError($"Can't find shader {shaderName}");
return; return;
} }
UpdatematerialQueue();
} }
public void OnVariantApplied(Part appliedPart, PartVariant variant) public void OnVariantApplied(Part appliedPart, PartVariant variant)
{ {
// I dont know why changing part variants resets all the materials to their as-loaded state, but it does
if (appliedPart == this.part) UpdatematerialQueue(); if (appliedPart == this.part) UpdatematerialQueue();
} }
private void UpdatematerialQueue() private void UpdatematerialQueue()
{ {
var windowRenderer = depthMask.GetComponent<MeshRenderer>(); var windowRenderer = maskTransformObject.GetComponent<MeshRenderer>();
windowRenderer.material.shader = depthShader; windowRenderer.material.shader = depthShader;
windowRenderer.material.renderQueue = maskRenderQueue; windowRenderer.material.renderQueue = maskRenderQueue;
this.Log(depthShader.name); var meshRenderers = bodyTransformObject.GetComponentsInChildren<MeshRenderer>(true);
this.Log(windowRenderer.material.shader.name); var skinnedMeshRenderers = bodyTransformObject.GetComponentsInChildren<SkinnedMeshRenderer>(true);
var meshRenderers = bodyRoot.GetComponentsInChildren<MeshRenderer>(true);
var skinnedMeshRenderers = bodyRoot.GetComponentsInChildren<SkinnedMeshRenderer>(true);
foreach (var renderer in meshRenderers) foreach (var renderer in meshRenderers)
{ {
@ -109,7 +112,7 @@ namespace Restock
queue = meshRenderQueue + ((queue - 2000) / 2); queue = meshRenderQueue + ((queue - 2000) / 2);
renderer.material.renderQueue = queue; renderer.material.renderQueue = queue;
} }
foreach (var renderer in skinnedMeshRenderers) foreach (var renderer in skinnedMeshRenderers)
{ {
if (renderer == windowRenderer) continue; if (renderer == windowRenderer) continue;

Loading…
Cancel
Save