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); } }