public void Calculate() { if (navigator.controls.showPreview) { // Destroy existing lines if (segments != null) { foreach (var segment in segments) { if (segment.line != null) { UnityEngine.Object.Destroy(segment.line); } } } // New segments array segments = new PreviewSegment[navigator.controls.ncontrols]; // Beginning time double UT0 = navigator.controls.UT0; Orbit orbitInitial = navigator.vessel.orbit; // Initial mass per segment double m0i = navigator.vessel.GetTotalMass(); // Calculate each segment for (var i = 0; i < segments.Length; i++) { // End time double UTf = UT0 + navigator.controls.controls[i].duration; // Calculate segment segments[i] = new PreviewSegment(navigator, orbitInitial, UT0, UTf, navigator.controls.controls[i], navigator.controls.controls[i].color, m0i); // Update initial mass for next segment m0i = segments[i].m1; // Update initial time UT0 = UTf; // Update initial orbit orbitInitial = segments[i].orbitf; } // Final time of trajectory this.UTf = UT0; // Draw one complete final orbit // Destroy existing line if (linef != null) { UnityEngine.Object.Destroy(linef); } // Create linerenderer & object var objf = new GameObject("Final orbit"); linef = objf.AddComponent <LineRenderer>(); linef.useWorldSpace = false; objf.layer = 10; // Map linef.material = MapView.fetch.orbitLinesMaterial; linef.SetColors(navigator.controls.colorFinal, navigator.controls.colorFinal); linef.SetVertexCount(361); // 3D points to use in linef linefPoints = new Vector3d[361]; // Final orbit of trajectory orbitf = orbitInitial; // Period of final orbit double TPf = orbitf.period; // Populate points for (var i = 0; i <= 360; i++) { double UTi = this.UTf + i * TPf / 360; // Relative orbitf position Vector3d rRelOrbitf = orbitf.getRelativePositionAtUT(UTi).xzy; // Absolute position linefPoints[i] = rRelOrbitf; } // Target line CalculateTargetLine(); } }
public void Calculate() { if (navigator.controls.showPreview) { // Destroy existing lines if (segments != null) { foreach(var segment in segments) { if (segment.line != null) { UnityEngine.Object.Destroy(segment.line); } } } // New segments array segments = new PreviewSegment[navigator.controls.ncontrols]; // Beginning time double UT0 = navigator.controls.UT0; Orbit orbitInitial = navigator.vessel.orbit; // Initial mass per segment double m0i = navigator.vessel.GetTotalMass(); // Calculate each segment for (var i = 0; i < segments.Length; i++) { // End time double UTf = UT0 + navigator.controls.controls[i].duration; // Calculate segment segments[i] = new PreviewSegment(navigator, orbitInitial, UT0, UTf, navigator.controls.controls[i], navigator.controls.controls[i].color, m0i); // Update initial mass for next segment m0i = segments[i].m1; // Update initial time UT0 = UTf; // Update initial orbit orbitInitial = segments[i].orbitf; } // Final time of trajectory this.UTf = UT0; // Draw one complete final orbit // Destroy existing line if (linef != null) { UnityEngine.Object.Destroy(linef); } // Create linerenderer & object var objf = new GameObject("Final orbit"); linef = objf.AddComponent<LineRenderer>(); linef.useWorldSpace = false; objf.layer = 10; // Map linef.material = MapView.fetch.orbitLinesMaterial; linef.SetColors(navigator.controls.colorFinal, navigator.controls.colorFinal); linef.SetVertexCount(361); // 3D points to use in linef linefPoints = new Vector3d[361]; // Final orbit of trajectory orbitf = orbitInitial; // Period of final orbit double TPf = orbitf.period; // Populate points for(var i = 0; i <= 360; i++) { double UTi = this.UTf + i * TPf / 360; // Relative orbitf position Vector3d rRelOrbitf = orbitf.getRelativePositionAtUT(UTi).xzy; // Absolute position linefPoints[i] = rRelOrbitf; } // Target line CalculateTargetLine(); } }