protected override void OnPaint(PaintEventArgs e) { //Prepare follow if (FollowUser != null) { foreach (MineProxy.Control.Player p in ProxyControl.Players.List) { if (p.Username == FollowUser) { Position.X = p.Position.X; Position.Z = p.Position.Z; if (p.Dimension == -1) { Position.X *= 8; Position.Z *= 8; } } } } base.OnPaint(e); Graphics g = e.Graphics; int r = 10; //Map TiledMapPainter.Paint(g, this, Width, Height, Position, Scale); //Regions foreach (WorldRegion w in Regions.List) { DrawRegion(g, w); } //Players foreach (StatusControl.PlayerListItem p in MainWindow.PlayerList.Items) { if (p.Online == false) { continue; } DrawPlayer(g, p); } //History //DrawHistory (g); //Crosshair g.DrawRectangle(Pens.Yellow, Width / 2, Height / 2 - r, 0, r * 2 + 1); g.DrawRectangle(Pens.Yellow, Width / 2 - r, Height / 2, r * 2 + 1, 0); g.FillRectangle(Brushes.White, 0, 0, 100, 50); g.DrawString(DateTime.Now.ToString("HH:mm:ss") + "\n" + Position.X.ToString("0") + ", " + Position.Z.ToString("0"), Font, Brushes.Black, 0, 0); }
protected void DrawRegion(Graphics g, WorldRegion w) { if (w.Dimension != (int)Dimension) { return; } Point topleft = FromCoord(w.MinX, w.MinZ); Point bottomright = FromCoord(w.MaxX, w.MaxZ); Size size = new Size(bottomright.X - topleft.X, bottomright.Y - topleft.Y); Rectangle rect = new Rectangle(topleft, size); if (size.Width < 1 || size.Height < 1) { return; } if (w.MaxX < w.MinX || w.MaxY < w.MinY || w.MaxZ < w.MinZ) { g.FillRectangle(Brushes.Red, new Rectangle(topleft, size)); } var pi = Position.CloneInt(); if (!w.Overlap(new MineProxy.Region(pi.X, pi.X, 0, 10000, pi.Z, pi.Z))) { //Draw defaullt content using (Pen p = new Pen(TiledMapPainter.AgeColor(w.Stats.LastVisitResident))) g.DrawRectangle(p, new Rectangle(topleft, size)); g.DrawString(w.Name, Font, Brushes.LimeGreen, rect); return; } //Draw selected region g.DrawRectangle(Pens.Orange, new Rectangle(topleft, size)); Point bottomleft = FromCoord(w.MinX, w.MaxZ); TimeSpan lastVisit = DateTime.UtcNow - w.Stats.LastVisitResident; string lastVisitText = lastVisit.TotalDays.ToString("0.0") + " days ago"; if (lastVisit.TotalDays > 500) { lastVisitText = "not visited"; } string text = w + "\n" + lastVisitText + "\n" + w.GetResidents(); size = g.MeasureString(text, Font, 300).ToSize(); size.Width += 6; size.Height += 6; rect = new Rectangle(bottomleft, size); g.FillRectangle(Brushes.DarkGreen, rect); g.DrawRectangle(Pens.LightGreen, rect); rect.X += 3; rect.Y += 3; g.DrawString(text, Font, Brushes.WhiteSmoke, rect); if (w.SubRegions == null) { return; } foreach (WorldRegion s in w.SubRegions) { DrawRegion(g, s); } }