private void rysujSamolot(Samolot s, Dystans d, Graphics g) { const int a = 24; Point pw = pozycjaWzgledna(s.X, s.Y); int x = pw.X, y = pw.Y; Point[] pkt = new Point[] { new Point(x - a / 3, y + a / 2), new Point(x, y - a / 2), new Point(x + a / 3, y + a / 2), new Point(x, y + a / 6), new Point(x - a / 3, y + a / 2) }; pkt = obrocPunkty(pkt, new Point(x, y), s.Kierunek); Pen p = new Pen(d == Dystans.Bezpieczny ? Color.Green : Color.Red); p.Width = 1; if (d == Dystans.Kolizja) { g.FillPolygon(Brushes.DarkRed, pkt); } g.DrawLines(p, pkt); int r = Radar.MIN_ODLEGLOSC * Skala / 100; g.DrawEllipse(d == Dystans.Bezpieczny ? Pens.Gray : Pens.DarkRed, x - r, y - r, 2 * r, 2 * r); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; g.DrawString("S-" + s.Numer, Font, d != Dystans.Kolizja ? Brushes.White : Brushes.Red, new Rectangle(x, y - a / 2 - 15, 0, 0), sf); }
private void rysujObiektNaziemny(ObiektNaziemny on, Dystans d, Graphics g) { const int a = 20; Point pw = pozycjaWzgledna(on.X, on.Y); int x = pw.X, y = pw.Y; Pen p = new Pen(d == Dystans.Bezpieczny ? Color.White : Color.Red); p.Width = 1; g.DrawRectangle(p, x - a / 2, y - a / 2, a, a); g.DrawLine(p, x - a / 2, y - a / 2, x + a / 2, y + a / 2); g.DrawLine(p, x - a / 2, y + a / 2, x + a / 2, y - a / 2); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; g.DrawString(on.Nazwa, Font, d != Dystans.Kolizja ? Brushes.White : Brushes.Red, new Rectangle(x, y - a / 2 - 15, 0, 0), sf); }
private void rysuj(Graphics g) { Dystans[] d = new Dystans[radar.Obiekty.Count]; for (int i = 0; i < d.Length; i++) { d[i] = Dystans.Bezpieczny; } for (int i = 0; i < radar.Obiekty.Count; i++) { Samolot s = radar.Obiekty[i] as Samolot; if (s == null || d[i] == Dystans.Kolizja) { continue; } for (int j = 0; j < radar.Obiekty.Count; j++) { if (radar.Kolizja(s, radar.Obiekty[j])) { d[i] = Dystans.Kolizja; d[j] = Dystans.Kolizja; break; } else if (radar.NiebezpiecznyDystans(s, radar.Obiekty[j])) { d[i] = Dystans.Niebezpieczny; d[j] = Dystans.Niebezpieczny; } } } g.Clear(Color.Black); for (int i = 0; i < radar.Obiekty.Count; i++) { if (radar.Obiekty[i] is ObiektNaziemny) { ObiektNaziemny on = radar.Obiekty[i] as ObiektNaziemny; rysujObiektNaziemny(on, d[i], g); } else if (radar.Obiekty[i] is Samolot) { Samolot s = radar.Obiekty[i] as Samolot; rysujSamolot(s, d[i], g); } } g.DrawLines(Pens.White, new Point[] { new Point(10, 40), new Point(5, 40), new Point(5, rozmiarEkranu.Height - 40), new Point(10, rozmiarEkranu.Height - 40) }); g.DrawLine(Pens.White, 5, rozmiarEkranu.Height / 2, 10, rozmiarEkranu.Height / 2); g.DrawLines(Pens.White, new Point[] { new Point(40, 10), new Point(40, 5), new Point(rozmiarEkranu.Width - 40, 5), new Point(rozmiarEkranu.Width - 40, 10) }); g.DrawLine(Pens.White, rozmiarEkranu.Width / 2, 5, rozmiarEkranu.Width / 2, 10); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; Point pb1 = pozycjaBezwzgledna(40, 40), pb2 = pozycjaBezwzgledna(rozmiarEkranu.Width / 2, rozmiarEkranu.Height / 2), pb3 = pozycjaBezwzgledna(rozmiarEkranu.Width - 40, rozmiarEkranu.Height - 40); g.DrawString(pb1.Y.ToString(), Font, Brushes.White, new Rectangle(12, 40, 0, 0), sf); g.DrawString(pb2.Y.ToString(), Font, Brushes.White, new Rectangle(12, rozmiarEkranu.Height / 2, 0, 0), sf); g.DrawString(pb3.Y.ToString(), Font, Brushes.White, new Rectangle(12, rozmiarEkranu.Height - 40, 0, 0), sf); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Near; g.DrawString(pb1.X.ToString(), Font, Brushes.White, new Rectangle(40, 12, 0, 0), sf); g.DrawString(pb2.X.ToString(), Font, Brushes.White, new Rectangle(rozmiarEkranu.Width / 2, 12, 0, 0), sf); g.DrawString(pb3.X.ToString(), Font, Brushes.White, new Rectangle(rozmiarEkranu.Width - 40, 12, 0, 0), sf); }