public ServerDataControl(ServerScreen screen, Manager manager, ServerData server, Control parent) : base(manager) { this.screen = screen; this.manager = manager; // Setup Passive = false; Height = 76; data = server; Width = parent.Width + 8; // Background "gradient" image // TODO: Make an actual control. not a statusbar gradient = new StatusBar(manager); gradient.Init(); gradient.Height = ClientHeight; gradient.Alpha = .8f; Add(gradient); // Add controls lblName = new Label(Manager) { Width = Width, Text = data.Name, Left = 4, Top = 4, Font = FontSize.Default14, Alignment = Alignment.TopLeft }; lblName.Init(); Add(lblName); lblStats = new Label(Manager) { Width = Width, Text = string.Empty, Alignment = Alignment.TopLeft, Top = 4, Font = FontSize.Default12 }; lblStats.Init(); Add(lblStats); lblDescription = new Label(Manager) { Width = Width, Left = 4, Top = lblName.Bottom + 6, Font = FontSize.Default8, Alignment = Alignment.TopLeft }; lblDescription.Init(); lblDescription.Text = "Querying server for data..."; lblDescription.Height = Manager.Skin.Fonts["Default8"].Height * 2; Add(lblDescription); imgStatus = new ImageBox(Manager) { Top = lblStats.Top + 6, Left = 4, Width = 10, Height = 10, Image = screen.Client.Content["gui.icons.ping"], }; imgStatus.Init(); imgStatus.Color = Color.Transparent; Add(imgStatus); lblHost = new Label(Manager) { Width = Width, Text = data.GetHostString(), Alignment = Alignment.TopLeft, Left = 4, Top = lblDescription.Bottom, TextColor = Color.Gray }; lblHost.Init(); Add(lblHost); this.screen.Client.Events.Network.Game.ServerInfoReceived.AddHandler(args => { if (endPoint != null && args.Host.Equals(endPoint)) { pingTimer?.Dispose(); lblStats.Text = args.Players + "/" + args.MaxPlayers; lblDescription.Text = args.Description; lblStats.TextColor = onlineColor; lblStats.Left = (ClientWidth - (int)Manager.Skin.Fonts["Default12"].Resource.MeasureString(lblStats.Text).X) - 4 - 32; imgStatus.Right = lblStats.Left - 2; imgStatus.Color = onlineColor; } }); }