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.
This commit is contained in:
Andrew Cassidy 2020-04-26 18:30:10 -07:00
parent b4d446a9b8
commit 6153434179
No known key found for this signature in database
GPG Key ID: 963017B38FD477A1
2 changed files with 25 additions and 13 deletions

View File

@ -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,10 +53,11 @@ 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;
girderSegmentMesh = Instantiate<Mesh>(girderMesh);
} }
girderMesh = towerGirder.GetComponent<MeshFilter>().mesh;
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,13 +117,22 @@ namespace Restock
girderSegments = Math.Min(girderSegments, maxSegments); girderSegments = Math.Min(girderSegments, maxSegments);
girderSegments = Math.Max(girderSegments, 0); girderSegments = Math.Max(girderSegments, 0);
if (instancingEnabled) if (HighLogic.LoadedSceneIsEditor){
{ if (instancingEnabled)
UpdateGirder(girderSegments); {
UpdateGirder(girderSegments);
}
else
{
UpdateGirderFallback(girderSegments);
}
} }
else else
{ {
if (_girderFlightUpdated) return;
UpdateGirderFallback(girderSegments); UpdateGirderFallback(girderSegments);
_girderFlightUpdated = true;
} }
} }
@ -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();