From 4ffca7114f0697ef65074c0614136f37c4db1614 Mon Sep 17 00:00:00 2001 From: MOARdV Date: Thu, 23 Jun 2016 07:20:30 -0500 Subject: [PATCH] Wrap VesselFlare Update with try/catch in case a vessel disappears and we don't see the callback for some reason. --- Source-Code/FlareDraw.cs | 55 +++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/Source-Code/FlareDraw.cs b/Source-Code/FlareDraw.cs index f2110c4..7e3aac6 100644 --- a/Source-Code/FlareDraw.cs +++ b/Source-Code/FlareDraw.cs @@ -85,30 +85,39 @@ class VesselFlare public void Update(Vector3d camPos, float camFOV) { - Vector3d targetVectorToCam = camPos - referenceShip.transform.position; - float targetDist = (float)Vector3d.Distance(referenceShip.transform.position, camPos); - bool activeSelf = flareMesh.activeSelf; - if (targetDist > 750000.0f && activeSelf) + try { - flareMesh.SetActive(false); - activeSelf = false; - } - else if (targetDist < 750000.0f && !activeSelf) - { - flareMesh.SetActive(true); - activeSelf = true; - } + Vector3d targetVectorToCam = camPos - referenceShip.transform.position; + float targetDist = (float)Vector3d.Distance(referenceShip.transform.position, camPos); + bool activeSelf = flareMesh.activeSelf; + if (targetDist > 750000.0f && activeSelf) + { + flareMesh.SetActive(false); + activeSelf = false; + } + else if (targetDist < 750000.0f && !activeSelf) + { + flareMesh.SetActive(true); + activeSelf = true; + } - if (activeSelf) - { - brightness = Mathf.Log10(luminosity) * (1.0f - Mathf.Pow(targetDist / 750000.0f, 1.25f)); + if (activeSelf) + { + brightness = Mathf.Log10(luminosity) * (1.0f - Mathf.Pow(targetDist / 750000.0f, 1.25f)); - flareMesh.transform.position = camPos - targetDist * targetVectorToCam.normalized; - flareMesh.transform.LookAt(camPos); - float resizeFactor = (0.002f * targetDist * brightness * (0.7f + .99f * camFOV) / 70.0f) * DistantObjectSettings.DistantFlare.flareSize; + flareMesh.transform.position = camPos - targetDist * targetVectorToCam.normalized; + flareMesh.transform.LookAt(camPos); + float resizeFactor = (0.002f * targetDist * brightness * (0.7f + .99f * camFOV) / 70.0f) * DistantObjectSettings.DistantFlare.flareSize; - flareMesh.transform.localScale = new Vector3(resizeFactor, resizeFactor, resizeFactor); - //Debug.Log(string.Format("Resizing vessel flare {0} to {1} - brightness {2}, luminosity {3}", referenceShip.vesselName, resizeFactor, brightness, luminosity)); + flareMesh.transform.localScale = new Vector3(resizeFactor, resizeFactor, resizeFactor); + //Debug.Log(string.Format("Resizing vessel flare {0} to {1} - brightness {2}, luminosity {3}", referenceShip.vesselName, resizeFactor, brightness, luminosity)); + } + } + catch + { + // If anything went whack, let's disable ourselves + flareMesh.SetActive(false); + referenceShip = null; } } @@ -337,11 +346,11 @@ private void GenerateVesselFlares() #endif // See if there are vessels that need to be removed from our live // list - foreach (Vessel v in vesselFlares.Keys) + foreach (var v in vesselFlares) { - if (v.orbit.referenceBody != FlightGlobals.ActiveVessel.orbit.referenceBody || v.loaded == true || !situations.Contains(v.situation)) + if (v.Key.orbit.referenceBody != FlightGlobals.ActiveVessel.orbit.referenceBody || v.Key.loaded == true || !situations.Contains(v.Key.situation) || v.Value.referenceShip == null) { - deadVessels.Add(v); + deadVessels.Add(v.Key); } } #if SHOW_FIXEDUPDATE_TIMING