Example #1
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);
            }
        }