public override void Update(GameTime gameTime)
        {
            StunDistance = 500;
            if (StunnedUnit == null)
            {
                Power += gameTime.ElapsedGameTime.Milliseconds;
            }

            if (Power > MaxPower)
            {
                Power           = MaxPower;
                StunSearchTime += gameTime.ElapsedGameTime.Milliseconds;
                if (StunSearchTime > MaxStunSearchTime && (StunnedUnit == null || !StunnedUnit.CanBeTargeted()))
                {
                    StunSearchTime -= MaxStunSearchTime;

                    QuadGrid quad         = Parent2DScene.quadGrids.First.Value;
                    float    BestDistance = StunDistance;

                    foreach (Basic2DObject o in quad.Enumerate(Position.get(), new Vector2(StunDistance)))
                    {
                        if (o.GetType().Equals(typeof(PlayerShip)))
                        {
                            float d = Vector2.Distance(Position.get(), o.Position.get());
                            if (d < BestDistance)
                            {
                                PlayerShip u = (PlayerShip)o;

                                if (WaveManager.ActiveTeam == u.GetTeam() && u.CanBeTargeted())
                                {
                                    BestDistance = d;
                                    StunnedUnit  = u;
                                    Alpha        = 0;
                                }
                            }
                        }
                    }
                }
            }

            if (StunnedUnit != null)
            {
                if (Power > 0 && StunnedUnit.CanBeTargeted() && Vector2.Distance(Position.get(), StunnedUnit.Position.get()) < StunDistance)
                {
                    if (Alpha < 1)
                    {
                        Alpha += gameTime.ElapsedGameTime.Milliseconds * 60 / 1000f * AlphaChange;
                        if (Alpha > 1)
                        {
                            Alpha = 1;
                        }
                    }
                    StunnedUnit.SetSpeed(Vector2.Normalize(StunnedUnit.Position.get() - Position.get()) * 8);
                    StunnedUnit.ShutDownTime = 100;

                    Vector3 ParticlePosition = new Vector3(Position.X(), Y, Position.Y());
                    Vector3 ChangeVector     = (new Vector3(StunnedUnit.Position.X(), Y, StunnedUnit.Position.Y()) - ParticlePosition);
                    ChangeVector.Normalize();
                    ChangeVector *= 10;

                    float StaticDistance  = Vector2.Distance(new Vector2(ParticlePosition.X, ParticlePosition.Z), StunnedUnit.Position.get());
                    float DynamicDistance = StaticDistance;

                    while (DynamicDistance > 10)
                    {
                        ParticleManager.CreateParticle(ParticlePosition, Vector3.Zero, CrystalColor * Alpha, Size.X() + (StunnedUnit.Size.X() - Size.X()) * (1 - DynamicDistance / StaticDistance) * 16, 1);
                        ParticlePosition += ChangeVector;
                        DynamicDistance   = Vector2.Distance(new Vector2(ParticlePosition.X, ParticlePosition.Z), StunnedUnit.Position.get());
                    }
                }
                else
                {
                    StunnedUnit = null;
                }
            }
            base.Update(gameTime);
        }