diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index f3915298..63670a46 100644 Binary files a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll and b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll differ diff --git a/Source/Restock/ModuleRestockLaunchClamp.cs b/Source/Restock/ModuleRestockLaunchClamp.cs index 8c21b99e..130a91a8 100644 --- a/Source/Restock/ModuleRestockLaunchClamp.cs +++ b/Source/Restock/ModuleRestockLaunchClamp.cs @@ -32,6 +32,8 @@ namespace Restock private List _girderColors; private List _girderTris; + private bool _girderFlightUpdated = false; + private bool _girderHasTangents = false; private bool _girderHasColors = false; private int _girderVertCount; @@ -51,9 +53,10 @@ namespace Restock this.LogWarning("You are using a computer which does not support instancing, " + "falling back to a slower launch clamp implementation"); instancingEnabled = false; - girderMesh = towerGirder.GetComponent().mesh; - girderSegmentMesh = Instantiate(girderMesh); } + + girderMesh = towerGirder.GetComponent().mesh; + girderSegmentMesh = Instantiate(girderMesh); base.OnLoad(node); } @@ -64,7 +67,7 @@ namespace Restock girderMesh = towerGirder.GetComponent().mesh; - if (instancingEnabled) + if (instancingEnabled && HighLogic.LoadedSceneIsEditor) { var girderRenderer = towerGirder.GetComponent(); girderRenderer.enabled = false; // we'll render manually from now on @@ -76,7 +79,6 @@ namespace Restock } else { - this.Log("Instancing is disabled, setting up fallback"); _girderVertCount = girderSegmentMesh.vertexCount; _girderTriCount = girderSegmentMesh.triangles.Length; @@ -106,7 +108,7 @@ namespace Restock var initialHeight = this.initialHeight; towerAnchor.position = towerStretch.position - towerStretch.up * height; - + var vec1 = Vector3.down; var vec2 = towerAnchor.localPosition - towerYoke.localPosition; towerYoke.localRotation = Quaternion.FromToRotation(vec1, vec2); @@ -114,14 +116,23 @@ namespace Restock var girderSegments = Mathf.CeilToInt(height / initialHeight); girderSegments = Math.Min(girderSegments, maxSegments); girderSegments = Math.Max(girderSegments, 0); - - if (instancingEnabled) - { - UpdateGirder(girderSegments); + + if (HighLogic.LoadedSceneIsEditor){ + if (instancingEnabled) + { + UpdateGirder(girderSegments); + } + else + { + UpdateGirderFallback(girderSegments); + } } else { + if (_girderFlightUpdated) return; + UpdateGirderFallback(girderSegments); + _girderFlightUpdated = true; } } @@ -136,14 +147,14 @@ namespace Restock matrix = offset * matrix; } - Graphics.DrawMeshInstanced(girderMesh, 0, _girderMaterial, _girderMatrices, girderSegments, part.mpb); + Graphics.DrawMeshInstanced(girderMesh, 0, _girderMaterial, _girderMatrices, girderSegments, part.mpb, + UnityEngine.Rendering.ShadowCastingMode.On, true, towerGirder.gameObject.layer); } private void UpdateGirderFallback(int newGirderSegments) { - if (newGirderSegments == _girderSegments) return; - + if (newGirderSegments > _girderSegments) { for (int i = _girderSegments; i < newGirderSegments; i++) @@ -177,7 +188,8 @@ namespace Restock if (_girderHasTangents) _girderTangents.RemoveRange(startIndex, count); if (_girderHasColors) _girderColors.RemoveRange(startIndex, count); - _girderTris.RemoveRange(newGirderSegments * _girderTriCount, (_girderSegments - newGirderSegments) * _girderTriCount); + _girderTris.RemoveRange(newGirderSegments * _girderTriCount, + (_girderSegments - newGirderSegments) * _girderTriCount); } girderMesh.Clear();