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;
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;
@ -106,7 +108,7 @@ namespace Restock
var initialHeight = this.initialHeight; var initialHeight = this.initialHeight;
towerAnchor.position = towerStretch.position - towerStretch.up * height; towerAnchor.position = towerStretch.position - towerStretch.up * height;
var vec1 = Vector3.down; var vec1 = Vector3.down;
var vec2 = towerAnchor.localPosition - towerYoke.localPosition; var vec2 = towerAnchor.localPosition - towerYoke.localPosition;
towerYoke.localRotation = Quaternion.FromToRotation(vec1, vec2); towerYoke.localRotation = Quaternion.FromToRotation(vec1, vec2);
@ -114,14 +116,23 @@ namespace Restock
var girderSegments = Mathf.CeilToInt(height / initialHeight); var girderSegments = Mathf.CeilToInt(height / initialHeight);
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,14 +147,14 @@ 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)
{ {
for (int i = _girderSegments; i < newGirderSegments; i++) for (int i = _girderSegments; i < newGirderSegments; i++)
@ -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