internal void FirePhaser(Target t)
        {
            LaserDrawer  BD1 = t.LaserDrawer1;
            LineRenderer LR1 = t.LineRenderer1;
            LaserDrawer  BD2 = t.LaserDrawer2;
            LineRenderer LR2 = t.LineRenderer2;
            LaserDrawer  BD3 = t.LaserDrawer3;
            LineRenderer LR3 = t.LineRenderer3;

            if (!t.PhaserSound.audio.enabled)
            {
                t.soundPitch = Mathf.Lerp(0.09f, 1f, t.PhaserYield / 500);
                t.PhaserSound.audio.pitch = t.soundPitch;
            }
            t.ship.GoOffRails();
            Vessel  Parent = FlightGlobals.ActiveVessel;
            Vector3 parentPosition_current = Parent.transform.localPosition;
            Vector3 childPosition_current  = t.ship.transform.localPosition;
            float   width = 0;

            // RENDER THE Phaser BEAM
            Vector3 PhaserBeamVector = parentPosition_current - childPosition_current;

            LR1   = BD1.render(PhaserBeamVector, Color.red);
            width = 1F;
            LR1.SetWidth(0.2F, width);
            LR1.SetPosition(0, parentPosition_current);
            LR1.SetPosition(1, childPosition_current);

            LR2   = BD2.render(PhaserBeamVector, Color.magenta);
            width = 0.3F;
            LR2.SetWidth(0.1F, width);
            LR2.SetPosition(0, parentPosition_current);
            LR2.SetPosition(1, childPosition_current);

            /*
             * Color fc = new Color(0.469F, 0.484F, 0.371F, 0.8F);
             * LR3 = BD3.render(PhaserBeamVector, fc,7);
             * LR3 = BD3.render(PhaserBeamVector, Color.magenta);
             * LR3.SetWidth(0.1F, 0.4F);
             * LR3.SetPosition(0, parentPosition_current);
             * for (int i = 1; i <= 5; i++)
             * {
             *  var pos = Vector3.Lerp(parentPosition_current, childPosition_current, i / 5.0f);
             *
             *  pos.x += rnd.Next(-4, 4)/10;
             *  pos.y += rnd.Next(-4, 4)/10;
             *  LR3.SetPosition(i, pos);
             * }
             * LR3.SetPosition(6, childPosition_current);
             * // RENDER THE Phaser BEAM
             */

            float dist = Vector3.Distance(FlightGlobals.ActiveVessel.findWorldCenterOfMass(), t.ship.findWorldCenterOfMass());

            foreach (var vesselPart in t.ship.parts.Where(p => p.rigidbody != null))
            {
                vesselPart.temperature += t.PhaserYield * 2000 / dist * TimeWarp.deltaTime;
            }
        }
        private void RemoveTarget(Target t)
        {
            t.PhaserSound.audio.Stop();

            LaserDrawer  BD1 = t.LaserDrawer1;
            LineRenderer LR1 = t.LineRenderer1;
            LaserDrawer  BD2 = t.LaserDrawer2;
            LineRenderer LR2 = t.LineRenderer2;
            LaserDrawer  BD3 = t.LaserDrawer3;
            LineRenderer LR3 = t.LineRenderer3;


            LR1 = BD1.render(Vector3.zero, Color.blue);
            LR1.SetWidth(0, 0);
            LR1.SetPosition(0, Vector3.zero);
            LR1.SetPosition(1, Vector3.zero);
            LR2 = BD2.render(Vector3.zero, Color.magenta);
            LR2.SetWidth(0, 0);
            LR2.SetPosition(0, Vector3.zero);
            LR2.SetPosition(1, Vector3.zero);
            Color fc = new Color(0.469F, 0.484F, 0.371F, 0.8F);

            LR3 = BD3.render(Vector3.zero, fc);
            LR3.SetWidth(0, 0);
            LR3.SetPosition(0, Vector3.zero);
            LR3.SetPosition(1, Vector3.zero);

            this.TargetList.Remove(t);
            this.TargetIDList.Remove(t.targetID);
        }
        private void CreateTarget(Vessel v)
        {
            //UnityEngine.Debug.Log("ImpulseDrive WeaponSystems: CreateTarget 1 ");
            Vessel   Parent = FlightGlobals.ActiveVessel;
            Vector3d parentPosition_current = Parent.transform.localPosition;
            Vector3d childPosition_current  = v.transform.localPosition;
            float    distance  = Vector3.Distance(parentPosition_current, childPosition_current);
            Vector3  newVector = parentPosition_current - childPosition_current;
            //UnityEngine.Debug.Log("ImpulseDrive WeaponSystems: CreateTarget 2 ");

            Target       nT  = new Target();
            LaserDrawer  LD1 = new LaserDrawer();
            LineRenderer LR1 = new LineRenderer();
            LaserDrawer  LD2 = new LaserDrawer();
            LineRenderer LR2 = new LineRenderer();
            LaserDrawer  LD3 = new LaserDrawer();
            LineRenderer LR3 = new LineRenderer();

            //UnityEngine.Debug.Log("ImpulseDrive WeaponSystems: CreateTarget 3 ");

            nT.targetID       = v.id.ToString();
            nT.ship           = v;
            nT.force          = 0.5F;
            nT.distance       = distance;
            nT.ParentPosition = parentPosition_current;
            nT.ShipPosition   = childPosition_current;
            nT.Vector         = newVector;
            nT.PhotonTorpedo  = new PhotonTorpedo();


            nT.LaserDrawer1  = LD1;
            nT.LineRenderer1 = LR1;
            nT.LaserDrawer2  = LD2;
            nT.LineRenderer2 = LR2;
            nT.LaserDrawer3  = LD3;
            nT.LineRenderer3 = LR3;
            nT.PhaserYield   = 0.5F;
            nT.TorpedoYield  = 0.5F;
            UnityEngine.Debug.Log("ImpulseDrive WeaponSystems: CreateTarget 4 ");
            this.TargetList.Add(nT);
            this.TargetIDList.Add(nT.targetID);
            UnityEngine.Debug.Log("ImpulseDrive WeaponSystems: CreateTarget 5 ");

            UnityEngine.Debug.Log("ImpulseDrive WeaponSystems: CreateTarget PhaserSound ");
            nT.PhaserSound = new FXGroup("PhaserSound");
            GameObject audioObj = new GameObject();

            nT.audioObj = audioObj;
            nT.audioObj.transform.position    = FlightGlobals.ActiveVessel.transform.position;
            nT.audioObj.transform.parent      = FlightGlobals.ActiveVessel.transform;   // add to parent
            nT.PhaserSound.audio              = audioObj.AddComponent <AudioSource>();
            nT.PhaserSound.audio.dopplerLevel = 0f;
            nT.PhaserSound.audio.Stop();
            nT.PhaserSound.audio.clip = GameDatabase.Instance.GetAudioClip(PhaserSoundFile);
            nT.PhaserSound.audio.loop = true;
            // Seek to a random position in the sound file so we don't have
            // harmonic effects when burning at multiple RCS nozzles.
            nT.PhaserSound.audio.time = UnityEngine.Random.Range(0, nT.PhaserSound.audio.clip.length);
            nT.PhaserSound.audio.Play();
            nT.PhaserSound.audio.enabled = false;
            nT.soundVolume = GameSettings.SHIP_VOLUME * PhaserSoundVolume;
            nT.PhaserSound.audio.volume = nT.soundVolume;
        }