diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index 8f43cb39..904a2e57 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 38d9cc53..22556fc3 100644 --- a/Source/Restock/ModuleRestockLaunchClamp.cs +++ b/Source/Restock/ModuleRestockLaunchClamp.cs @@ -5,30 +5,28 @@ namespace Restock { public class ModuleRestockLaunchClamp : LaunchClamp { - [KSPField] public string trf_towerGirder_name = ""; - [KSPField] public string trf_towerYoke_name = ""; - - [KSPField] public Transform towerPivot; - [KSPField] public Transform towerYoke; - [KSPField] public Transform towerAnchor; - [KSPField] public Transform towerGirder; - [KSPField] public Transform towerStretch; - [KSPField] public int maxSegments = 100; - - private bool _flightUpdate = false; private Material _girderMaterial; + private Matrix4x4[] _girderMatrices; private Mesh _girderMesh; private int _girderSegments; - private Matrix4x4[] _girderMatrices; + [KSPField] public int maxSegments = 100; + [KSPField] public Transform towerAnchor; + [KSPField] public Transform towerGirder; + + [KSPField] public Transform towerPivot; + [KSPField] public Transform towerStretch; + [KSPField] public Transform towerYoke; + [KSPField] public string trf_towerGirder_name = ""; + [KSPField] public string trf_towerYoke_name = ""; public override void OnLoad(ConfigNode node) { - towerPivot = base.part.FindModelTransform(trf_towerPivot_name); - towerYoke = base.part.FindModelTransform(trf_towerYoke_name); - towerAnchor = base.part.FindModelTransform(trf_anchor_name); - towerGirder = base.part.FindModelTransform(trf_towerGirder_name); - towerStretch = base.part.FindModelTransform(trf_towerStretch_name); + towerPivot = part.FindModelTransform(trf_towerPivot_name); + towerYoke = part.FindModelTransform(trf_towerYoke_name); + towerAnchor = part.FindModelTransform(trf_anchor_name); + towerGirder = part.FindModelTransform(trf_towerGirder_name); + towerStretch = part.FindModelTransform(trf_towerStretch_name); base.OnLoad(node); } @@ -42,7 +40,7 @@ namespace Restock _girderMesh = towerGirder.GetComponent().mesh; girderRenderer.enabled = false; // we'll render manually from now on - + _girderSegments = 0; _girderMatrices = new Matrix4x4[maxSegments]; @@ -51,41 +49,33 @@ namespace Restock { this.LogError("Could not enable instancing! Aborting"); _girderSegments = -1; - return; } } public void LateUpdate() { - if (_girderSegments < 0) return; - if (!HighLogic.LoadedSceneIsEditor) - { - if (_flightUpdate) return; - else _flightUpdate = true; - } - - var height1 = HighLogic.LoadedSceneIsEditor ? towerStretch.position.y : base.height; - var initialHeight1 = base.initialHeight; + var height = HighLogic.LoadedSceneIsEditor ? towerStretch.position.y : this.height; + var initialHeight = this.initialHeight; - towerAnchor.position = towerStretch.position - (towerStretch.up * height1); + towerAnchor.position = towerStretch.position - towerStretch.up * height; var vec1 = Vector3.down; var vec2 = towerAnchor.localPosition - towerYoke.localPosition; towerYoke.localRotation = Quaternion.FromToRotation(vec1, vec2); - - _girderSegments = Mathf.CeilToInt(height1 / base.initialHeight); + + _girderSegments = Mathf.CeilToInt(height / this.initialHeight); _girderSegments = Math.Min(_girderSegments, maxSegments); _girderSegments = Math.Max(_girderSegments, 0); - + var matrix = towerGirder.localToWorldMatrix; - var offset = Matrix4x4.Translate(matrix.MultiplyVector(Vector3.down * base.initialHeight)); - - for (int i = 0; i < _girderSegments; i++) + var offset = Matrix4x4.Translate(towerGirder.TransformVector(Vector3.down * initialHeight)); + + for (var i = 0; i < _girderSegments; i++) { _girderMatrices[i] = matrix; - matrix *= offset; + matrix = offset * matrix; } Graphics.DrawMeshInstanced(_girderMesh, 0, _girderMaterial, _girderMatrices, _girderSegments, part.mpb);