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