Exemplo n.º 1
0
        private void DibujarFlota(PaintEventArgs e, Cliente jugador, Flota flota)
        {
            try
            {
                Color inicioDegradado = jugador.Color;
                Color finalDegradado  = jugador.Color;

                PointF caminoMasCorto = CalcularCaminoMasCorto(flota.Origen, flota.Destino);

                float y0 = flota.Origen.Location.Y + flota.Origen.Height / 2;
                float x0 = flota.Origen.Location.X + flota.Origen.Width / 2;
                float y  = caminoMasCorto.Y;
                float x  = caminoMasCorto.X;

                if (Cliente.CalcularDistancia(flota.Origen, flota.Destino) <= 1)
                {
                    y = flota.Destino.Location.Y + flota.Destino.Height / 2;
                    x = flota.Destino.Location.X + flota.Destino.Width / 2;
                }

                Pen lapiz = new Pen(jugador.Color, 4f);
                lapiz.EndCap    = LineCap.ArrowAnchor;
                lapiz.StartCap  = LineCap.Round;
                lapiz.DashStyle = DashStyle.Dot;

                if (InformacionPrograma.Mono == false)
                {
                    inicioDegradado = jugador.Color;
                    finalDegradado  = ControlPaint.LightLight(jugador.Color);

                    lapiz.Brush = new LinearGradientBrush(new PointF(x0, y0), new PointF(x, y), inicioDegradado, finalDegradado);
                }

                e.Graphics.DrawLine(lapiz, new PointF(x0, y0), new PointF(x, y));

                //Dibujar la parte recorrida
                float distancia           = Pitagoras(x - x0, y - y0);
                float recorridoCompletado = (RondaActual - flota.RondaSalida) / (float)(flota.RondaLlegada - flota.RondaSalida);

                lapiz          = new Pen(jugador.Color, 6f);
                lapiz.EndCap   = LineCap.ArrowAnchor;
                lapiz.StartCap = LineCap.Round;

                float distanciaCompletada = distancia * recorridoCompletado;

                if (recorridoCompletado > 0 && recorridoCompletado <= 1)
                {
                    float seno   = (float)Math.Abs((y - y0) / distancia);
                    float coseno = (float)Math.Cos(Math.Asin(seno));

                    float xActual = x0;
                    if (x0 > x)
                    {
                        xActual -= distanciaCompletada * coseno;
                    }
                    else
                    {
                        xActual += distanciaCompletada * coseno;
                    }

                    float yActual = y0;
                    if (y0 > y)
                    {
                        yActual -= distanciaCompletada * seno;
                    }
                    else
                    {
                        yActual += distanciaCompletada * seno;
                    }

                    if (InformacionPrograma.Mono)
                    {
                        lapiz.Brush = new SolidBrush(ControlPaint.LightLight(jugador.Color));
                    }
                    else
                    {
                        lapiz.Brush = new LinearGradientBrush(new PointF(x0, y0), new PointF(xActual, yActual), inicioDegradado, finalDegradado);
                    }

                    e.Graphics.DrawLine(lapiz, new PointF(x0, y0), new PointF(xActual, yActual));

                    if (DibujarDestinoFlotas)
                    {
                        e.Graphics.DrawString(flota.Destino.Name, this.Font, new SolidBrush(Color.Red),
                                              new RectangleF(xActual - 5, yActual - 5, 10, 10), StringFormat.GenericDefault);
                    }
                }
            }
            catch { }
        }