Always use fallback launch clamp implementation in flight

Instanced rendering doesnt work with lighting correctly in Unity, so we cant use it in the flight scene.
pull/850/head
Andrew Cassidy 4 years ago
parent b4d446a9b8
commit 6153434179
No known key found for this signature in database
GPG Key ID: 963017B38FD477A1

@ -32,6 +32,8 @@ namespace Restock
private List<Color32> _girderColors; private List<Color32> _girderColors;
private List<int> _girderTris; private List<int> _girderTris;
private bool _girderFlightUpdated = false;
private bool _girderHasTangents = false; private bool _girderHasTangents = false;
private bool _girderHasColors = false; private bool _girderHasColors = false;
private int _girderVertCount; private int _girderVertCount;
@ -51,9 +53,10 @@ namespace Restock
this.LogWarning("You are using a computer which does not support instancing, " + this.LogWarning("You are using a computer which does not support instancing, " +
"falling back to a slower launch clamp implementation"); "falling back to a slower launch clamp implementation");
instancingEnabled = false; instancingEnabled = false;
}
girderMesh = towerGirder.GetComponent<MeshFilter>().mesh; girderMesh = towerGirder.GetComponent<MeshFilter>().mesh;
girderSegmentMesh = Instantiate<Mesh>(girderMesh); girderSegmentMesh = Instantiate<Mesh>(girderMesh);
}
base.OnLoad(node); base.OnLoad(node);
} }
@ -64,7 +67,7 @@ namespace Restock
girderMesh = towerGirder.GetComponent<MeshFilter>().mesh; girderMesh = towerGirder.GetComponent<MeshFilter>().mesh;
if (instancingEnabled) if (instancingEnabled && HighLogic.LoadedSceneIsEditor)
{ {
var girderRenderer = towerGirder.GetComponent<MeshRenderer>(); var girderRenderer = towerGirder.GetComponent<MeshRenderer>();
girderRenderer.enabled = false; // we'll render manually from now on girderRenderer.enabled = false; // we'll render manually from now on
@ -76,7 +79,6 @@ namespace Restock
} }
else else
{ {
this.Log("Instancing is disabled, setting up fallback");
_girderVertCount = girderSegmentMesh.vertexCount; _girderVertCount = girderSegmentMesh.vertexCount;
_girderTriCount = girderSegmentMesh.triangles.Length; _girderTriCount = girderSegmentMesh.triangles.Length;
@ -115,6 +117,7 @@ namespace Restock
girderSegments = Math.Min(girderSegments, maxSegments); girderSegments = Math.Min(girderSegments, maxSegments);
girderSegments = Math.Max(girderSegments, 0); girderSegments = Math.Max(girderSegments, 0);
if (HighLogic.LoadedSceneIsEditor){
if (instancingEnabled) if (instancingEnabled)
{ {
UpdateGirder(girderSegments); UpdateGirder(girderSegments);
@ -124,6 +127,14 @@ namespace Restock
UpdateGirderFallback(girderSegments); UpdateGirderFallback(girderSegments);
} }
} }
else
{
if (_girderFlightUpdated) return;
UpdateGirderFallback(girderSegments);
_girderFlightUpdated = true;
}
}
private void UpdateGirder(int girderSegments) private void UpdateGirder(int girderSegments)
{ {
@ -136,12 +147,12 @@ namespace Restock
matrix = offset * matrix; 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) private void UpdateGirderFallback(int newGirderSegments)
{ {
if (newGirderSegments == _girderSegments) return; if (newGirderSegments == _girderSegments) return;
if (newGirderSegments > _girderSegments) if (newGirderSegments > _girderSegments)
@ -177,7 +188,8 @@ namespace Restock
if (_girderHasTangents) _girderTangents.RemoveRange(startIndex, count); if (_girderHasTangents) _girderTangents.RemoveRange(startIndex, count);
if (_girderHasColors) _girderColors.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(); girderMesh.Clear();

Loading…
Cancel
Save