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 { } }