private void RemoveBeam(TBeam b) { b.TractorSound.audio.Stop(); b.TractorSound.audio.enabled = false; //foo1.removeGimbal(); foo2.removeGimbal(); //foo4.removeGimbal(); UnityEngine.Debug.Log("ImpulseDrive TractorBeam: RemoveBeam 1 : " + b.ship.vesselName); BeamDrawer BD1 = b.BeamDrawer1; LineRenderer LR1 = b.LineRenderer1; BeamDrawer BD2 = b.BeamDrawer2; LineRenderer LR2 = b.LineRenderer2; BeamDrawer debug_BD1 = b.debug1_BeamDrawer; LineRenderer debug_LR1 = b.debug1_LineRenderer; BeamDrawer debug_BD2 = b.debug2_BeamDrawer; LineRenderer debug_LR2 = b.debug2_LineRenderer; UnityEngine.Debug.Log("ImpulseDrive TractorBeam: RemoveBeam 2 : " + b.ship.vesselName); UnityEngine.Debug.Log("ImpulseDrive TractorBeam: RemoveBeam 3 : " + b.ship.vesselName); //b.debug1_LineRenderer.enabled = false; UnityEngine.Debug.Log("ImpulseDrive TractorBeam: RemoveBeam 4 : " + b.ship.vesselName); LR1 = BD1.render(Vector3.zero, Color.blue, 1); LR1.SetWidth(0, 0); LR1.SetPosition(0, Vector3.zero); LR1.SetPosition(1, Vector3.zero); //BD1.Destroy(); UnityEngine.Debug.Log("ImpulseDrive TractorBeam: RemoveBeam 5 : " + b.ship.vesselName); Color fc = new Color(0.469F, 0.484F, 0.371F, 0.8F); LR2 = BD2.render(Vector3.zero, fc, 1); LR2.SetWidth(0, 0); LR2.SetPosition(0, Vector3.zero); LR2.SetPosition(1, Vector3.zero); //BD2.Destroy(); UnityEngine.Debug.Log("ImpulseDrive TractorBeam: RemoveBeam 6 : " + b.ship.vesselName); /* * debug_LR1 = debug_BD1.render(Vector3.zero, Color.green); * debug_LR1.SetWidth(0, 0); * debug_LR1.SetPosition(0, Vector3.zero); * debug_LR1.SetPosition(1, Vector3.zero); * //debug_BD1.Destroy(); * UnityEngine.Debug.Log("ImpulseDrive TractorBeam: RemoveBeam 7 : " + b.ship.vesselName); * * debug_LR2 = debug_BD2.render(Vector3.zero, Color.yellow); * debug_LR2.SetWidth(0, 0); * debug_LR2.SetPosition(0, Vector3.zero); * debug_LR2.SetPosition(1, Vector3.zero); * //debug_BD2.Destroy(); * UnityEngine.Debug.Log("ImpulseDrive TractorBeam: RemoveBeam 8 : " + b.ship.vesselName); */ this.BeamIDList.Remove(b.beamID); this.BeamList.Remove(b); //BD = null; //LR = null; //b = null; UnityEngine.Debug.Log("ImpulseDrive TractorBeam: RemoveBeam 9 : " + b.ship.vesselName); }
public void Update_RenderBeams() { foreach (TBeam b in this.BeamList) { Vessel Parent = FlightGlobals.ActiveVessel; Vector3 parentPosition_current = Parent.GetWorldPos3D(); Vector3 childPosition_current = b.ship.GetWorldPos3D(); //Vector3 parentPosition_current = Parent.findWorldCenterOfMass(); //Vector3 childPosition_current = b.ship.findWorldCenterOfMass(); //Vector3 parentPosition_current = Parent.findLocalCenterOfMass(); //Vector3 childPosition_current = b.ship.findLocalCenterOfMass(); //Vector3 parentPosition_current = Parent.transform.position; //Vector3 childPosition_current = b.ship.transform.position; //Vector3 parentPosition_current = Parent.transform.localPosition; //Vector3 childPosition_current = b.ship.transform.localPosition; BeamDrawer BD1 = b.BeamDrawer1; LineRenderer LR1 = b.LineRenderer1; BeamDrawer BD2 = b.BeamDrawer2; LineRenderer LR2 = b.LineRenderer2; BeamDrawer debug_BD1 = b.debug1_BeamDrawer; LineRenderer debug_LR1 = b.debug1_LineRenderer; BeamDrawer debug_BD2 = b.debug2_BeamDrawer; LineRenderer debug_LR2 = b.debug2_LineRenderer; GameObject Empty1 = b.Empty1; GameObject Empty2 = b.Empty2; int width = 0; float check_distance = Vector3.Distance(parentPosition_current, childPosition_current); if (check_distance < 2000F) { b.ship.GoOffRails(); //* works!!!! // MOVE THE HELPER LINE - NO FORCE APPLIED HERE Empty1.transform.parent = Parent.transform; Empty1.transform.position = Parent.transform.position; Empty2.transform.parent = Empty1.transform; Empty2.transform.position = Empty1.transform.position; Empty2.transform.rotation = Empty1.transform.rotation; Vector3 temp2 = Empty2.transform.TransformDirection(b.Vector); Vector3 GimbalPosition = SetVectorLength(temp2, b.distance); //Empty2.transform.position = GimbalPosition; Empty2.transform.localPosition = GimbalPosition; Empty1.transform.Rotate(b.x_slider, 0, b.z_slider); b.xAngle = Empty1.transform.localEulerAngles.x; b.zAngle = Empty1.transform.localEulerAngles.z; b.x_slider = 0; b.y_slider = 0; b.z_slider = 0; // MOVE THE HELPER LINE - NO FORCE APPLIED HERE // OBSOLETE - RENDER THE HELPER LINE - NO FORCE APPLIED HERE b.distance = Mathf.Clamp(b.distance, 5, 2000); b.debug1_LineRenderer = debug_BD1.render2(Empty1.transform, Empty1.transform.up, Empty1.transform.localPosition, b.distance, 0.1f, Color.green, Color.red); b.debug1_LineRenderer.enabled = false; // OBSOLETE - RENDER THE HELPER LINE - NO FORCE APPLIED HERE // works !!!! */ // FORCE APPLIED HERE //Vector3 newVector = SetVectorLength(Empty1.transform.TransformPoint(Empty1.transform.up), b.distance); //float current_Distance = Vector3.Distance(parentPosition_current, childPosition_current); //float step = current_Distance * Time.deltaTime; //b.ship.transform.position = Vector3.Lerp(childPosition_current, Empty2.transform.position, 0.5F * Time.deltaTime); //b.ship.transform.position = Vector3.Lerp(b.ship.transform.position, Empty2.transform.position, 0.5F * Time.deltaTime); float targetError = Vector3.Distance(b.ship.transform.position, Empty2.transform.position); b.targetError = targetError; float step = targetError * Time.deltaTime; b.ship.transform.position = Vector3.MoveTowards(b.ship.transform.position, Empty2.transform.position, step); Vector3 targetErrorVector = b.ship.transform.position - Empty2.transform.position; foreach (var vesselPart in b.ship.parts.Where(p => p.rigidbody != null)) { vesselPart.rigidbody.AddForce(targetErrorVector * -1 * (b.force / targetError), ForceMode.Acceleration); } // FORCE APPLIED HERE /* */ // RENDER THE TRACTOR BEAM - NO FORCE APPLIED HERE Vector3 TractorBeamVector = b.Vector; System.Random rnd = new System.Random(); width = rnd.Next(5, 12); LR1 = BD1.render(TractorBeamVector, Color.blue, 1); LR1.SetWidth(1, width); LR1.SetPosition(0, FlightGlobals.ActiveVessel.findWorldCenterOfMass()); LR1.SetPosition(1, b.ship.GetWorldPos3D()); Color fc = new Color(0.469F, 0.484F, 0.371F, 0.8F); width = rnd.Next(1, 5); LR2 = BD2.render(TractorBeamVector, fc, 1); LR2.SetWidth(1, width); LR2.SetPosition(0, FlightGlobals.ActiveVessel.findWorldCenterOfMass()); LR2.SetPosition(1, b.ship.GetWorldPos3D()); // RENDER THE TRACTOR BEAM - NO FORCE APPLIED HERE } else { this.RemoveBeam(b); } } }