public async void ScoreboardRenderer1(XAML.Scoreboard parent, string mapID, CustomSnapshotRoot root, string teamlogo1 = "", string teamlogo2 = "")
        {

            if ((root.snapshot.teamInfo.team1.player.Count + root.snapshot.teamInfo.team2.player.Count) > 10)
                return;
            string teamLogoDir = Directory.GetCurrentDirectory() + "\\images\\team_logos\\";
            string scoreboardTemplate = Directory.GetCurrentDirectory() + "\\images\\background\\bg.png";
            if(root == null)
            {
                return;
            }
            //Set up where to output the image to
            m_parent = parent;
            //Get the map image from resources Dynamically
            object O = Properties.Resources.ResourceManager.GetObject(mapID.ToLower());
            //Font type 
            Gdi.Font font = new Gdi.Font("Trebuchet MS", 20f, System.Drawing.FontStyle.Bold);
            //Load the scoreboard template image
            Gdi.Bitmap bitmap = null;
            try
            {
                bitmap = new Gdi.Bitmap(scoreboardTemplate);
            }catch(Exception)
            {
                bitmap = Properties.Resources.bg;
            }

            Gdi.Bitmap clone = new Gdi.Bitmap(bitmap.Width, bitmap.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
            Gdi.Graphics gr = Gdi.Graphics.FromImage(clone);
            
                gr.DrawImage(bitmap, new Gdi.Rectangle(0, 0, clone.Width, clone.Height));
            
            //bitmap.MakeTransparent();
            //bitmap.
            //Load the bitmap to a gdi graphic
            Gdi.Graphics g = Gdi.Graphics.FromImage(bitmap);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.TextRenderingHint = Gdi.Text.TextRenderingHint.AntiAliasGridFit;
            Gdi.Bitmap team1Logo = null;
            Gdi.Bitmap team2Logo = null;
            //========= Team 1s Logo
            if (teamlogo1 == "")
            {
                if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) == "US")
                    team1Logo = new Gdi.Bitmap(Properties.Resources.usa);
                else if(Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) == "CN")
                    team1Logo = new Gdi.Bitmap(Properties.Resources.china);
                else if(Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) == "RU")
                    team1Logo = new Gdi.Bitmap(Properties.Resources.ru);
            }
            else
            {
                team1Logo = new Gdi.Bitmap(teamLogoDir + teamlogo1);

            }
            //Load the map image to a bitmap
            g.DrawImage(resize(250, 250, (Gdi.Image)team1Logo), 200, 360);
            //========= Team 2s Logo
            if (teamlogo2 == "")
            {
                if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) == "US")
                    team2Logo = new Gdi.Bitmap(Properties.Resources.usa);
                else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) == "CN")
                    team2Logo = new Gdi.Bitmap(Properties.Resources.china);
                else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) == "RU")
                    team2Logo = new Gdi.Bitmap(Properties.Resources.ru);
            }
            else
            {
                team2Logo = new Gdi.Bitmap(teamLogoDir + teamlogo2);
            }            //Load the map image to a bitmap
            g.DrawImage(resize(250, 250, (Gdi.Image)team2Logo), 1000, 360);


            Gdi.Bitmap map = new Gdi.Bitmap(resize(350, 170, (Gdi.Image)O));
            //draw the map image onto the scoreboard template
            g.DrawImage(map, 1200, 880);
            map.Dispose();
            map = null;
            //draw a string onto the map image
            g.DrawString(JSONHelper.whatMap(root.snapshot.mapId), font, Gdi.Brushes.White, 1480, 880);
            g.DrawString(JSONHelper.whatMode(root.snapshot.modeId), font, Gdi.Brushes.White, 1480, 910);
            g.DrawString(UsefulFunctions.getTime(root.snapshot.roundTime, 1), font, Gdi.Brushes.White, 1480, 940);

            //Draw player names for team 1 and team 2 with player data to the scoreboard
            //http://battlelog.battlefield.com/bf4/servers/show/pc/1ab24458-5ee9-4765-a2e8-fa96c464f506/Resistence-Team-Server-SQOBLITERATION-5on5-ESL-Rules-ON/
            int row = 560;
            int max = 58;
            int team1Kills = 0;
            int team1Deaths = 0;
            int team1Score = 0;
            g.DrawString(JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) + " - " + root.snapshot.team1Tickets.tickets.ToString() + "/" + root.snapshot.team1Tickets.ticketsMax.ToString()
                                                            , font, Gdi.Brushes.White, 200, 330);
            foreach (var player in root.snapshot.teamInfo.team1.player)
            {
                if (player.tag != "")
                {
                    string playerName = "[" + player.tag + "]" + player.name;
                    g.DrawString(playerName, font, Gdi.Brushes.White, 190, row);
                }
                else
                {
                    g.DrawString(player.name, font, Gdi.Brushes.White, 190, row);
                }
                //Draw Players Kit
                Gdi.Bitmap kitIcon = null;
                Classes.Structs.PlayerLoadout playerInfo = await Classes.GetPlayersKit.GetWeaponInfo(player.playerId, player.name);

                switch (playerInfo.selectedKit.ToString())
                {
                    case "0":
                        kitIcon = Properties.Resources._0;
                        break;
                    case "1":
                        kitIcon = Properties.Resources._1;
                        break;
                    case "2":
                        kitIcon = Properties.Resources._2;
                        break;
                    case "3":
                        kitIcon = Properties.Resources._3;
                        break;
                    default:
                        kitIcon = Properties.Resources._0;
                        break;
                }
       
                g.DrawImage((Gdi.Image)kitIcon, 165, row);

                g.DrawString(player.score.ToString(), font, Gdi.Brushes.White, 480, row);
                g.DrawString(player.kills.ToString(), font, Gdi.Brushes.White, 620, row);
                g.DrawString(player.deaths.ToString(), font, Gdi.Brushes.White, 725, row);
                if (player.bombDetonationTime != null)
                {
                    int i = 1;
                    foreach (var time in player.bombDetonationTime)
                    {
                        g.DrawString(Classes.UsefulFunctions.getTime(time, 1), font, Gdi.Brushes.White, 850, (row + 35) - (i * 26));
                        i += 1;
                    }
                }
                row = row + max;
                team1Kills += player.kills;
                team1Deaths += player.deaths;
                team1Score += player.score;
                kitIcon.Dispose();

            }
            //------------------------------------
            //------------- Draw Team Totals
            g.DrawString(team1Score.ToString(), font, Gdi.Brushes.White, 480, 835);
            g.DrawString(team1Kills.ToString(), font, Gdi.Brushes.White, 620, 835);
            g.DrawString(team1Deaths.ToString(), font, Gdi.Brushes.White, 725, 835);

            //-------------------------------------
            row = 560;
            int rightOffset = 815;
            g.DrawString(JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) + " - " + root.snapshot.team2Tickets.tickets.ToString() + "/" + root.snapshot.team2Tickets.ticketsMax.ToString()
                                            , font, Gdi.Brushes.White, 200 + rightOffset, 330);

            int team2Kills = 0;
            int team2Deaths = 0;
            int team2Score = 0;
            foreach (var player in root.snapshot.teamInfo.team2.player)
            {
                if (player.tag != "")
                {
                    string playerName = "[" + player.tag + "]" + player.name;
                    g.DrawString(playerName, font, Gdi.Brushes.White, 190 + rightOffset, row);
                }
                else
                {
                    g.DrawString(player.name, font, Gdi.Brushes.White, 190 + rightOffset, row);
                }
                Gdi.Bitmap kitIcon = null;
                Classes.Structs.PlayerLoadout playerInfo = await Classes.GetPlayersKit.GetWeaponInfo(player.playerId, player.name);

                switch (playerInfo.selectedKit.ToString())
                {
                    case "0":
                        kitIcon = Properties.Resources._0;
                        break;
                    case "1":
                        kitIcon = Properties.Resources._1;
                        break;
                    case "2":
                        kitIcon = Properties.Resources._2;
                        break;
                    case "3":
                        kitIcon = Properties.Resources._3;
                        break;
                }

                g.DrawImage((Gdi.Image)kitIcon, 165 + rightOffset, row);
                g.DrawString(player.score.ToString(), font, Gdi.Brushes.White, 480  + rightOffset, row);
                g.DrawString(player.kills.ToString(), font, Gdi.Brushes.White, 620 + rightOffset, row);
                g.DrawString(player.deaths.ToString(), font, Gdi.Brushes.White, 725+ rightOffset, row);
                if (player.bombDetonationTime != null)
                {
                    int i = 1;
                    foreach (var time in player.bombDetonationTime)
                    {
                        g.DrawString(Classes.UsefulFunctions.getTime(time, 1), font, Gdi.Brushes.White, 850 + rightOffset, (row + 35) - (i * 26));
                        i += 1;
                    }
                }
                row = row + max;
                team2Kills += player.kills;
                team2Deaths += player.deaths;
                team2Score += player.score;
                kitIcon.Dispose();
            }
            //------------------------------------
            //------------- Draw Team Totals
            g.DrawString(team2Score.ToString(), font, Gdi.Brushes.White, 480 + rightOffset, 835);
            g.DrawString(team2Kills.ToString(), font, Gdi.Brushes.White, 620 + rightOffset, 835);
            g.DrawString(team2Deaths.ToString(), font, Gdi.Brushes.White, 725 + rightOffset, 835);

            //-------------------------------------
            //Convert to ui readable image
            ImageSource bitmapSource = loadBitmap(bitmap);
            /*ImageSource bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(),
                                  IntPtr.Zero,
                                  Int32Rect.Empty,
                                  BitmapSizeOptions.FromEmptyOptions());*/
            //Try and dispose everything
            if (bitmapSource != null)
            {
                m_parent.image.Source = bitmapSource;
            }
            font.Dispose();
            clone.Dispose();
            g.Dispose();
            bitmap.Dispose();
            team1Logo.Dispose();
            team2Logo.Dispose();
            gr.Dispose();
            
            // Create a writeable bitmap (which is a valid WPF Image Source
        }
Esempio n. 2
0
        public async Task<CustomSnapshotRoot> getKeeperInfo(string guid)
        {
            string keeperData = "";
            getNumPlayersOnServer playersOnServerData = getNumPlayersOnServerInfo(guid);
            SnapshotRoot snapshotData = null;
            CustomSnapshotRoot snapshotSend = null;
            List<playersData> team0Data = new List<playersData>();
            List<playersData> team1Data = new List<playersData>();
            List<playersData> team2Data = new List<playersData>();
            playersData empty = new playersData { name = "No players on the server" };
            
            try
            {
                keeperData = await HttpAsync.GetUrlAsync(keeperURL + guid);
            }
            catch (Exception)
            {
                CLogging.AddLog("The server crashed or was never available: " + guid);
            }

            snapshotData = JsonConvert.DeserializeObject<SnapshotRoot>(keeperData);

            if (snapshotData == null)
                return null;
            if (!snapshotData.snapshot.status.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase))
                return null;
            //run update code and return null

            if (snapshotData.snapshot.teamInfo.Team0 != null)
            {
                var team0 = snapshotData.snapshot.teamInfo.Team0;
                foreach (KeyValuePair<string, JToken> x in team0.players)
                {
                    TeamPlayer playerInfo = x.Value.ToObject<TeamPlayer>();

                    team0Data.Add(
                        new playersData
                        {
                            playerId = ulong.Parse(x.Key.ToString()),
                            name = playerInfo.Name,
                            kills = playerInfo.kills,
                            deaths = playerInfo.deaths,
                            score = playerInfo.score,
                            tag = playerInfo.tag,
                            squad = playerInfo.squad,
                            role = playerInfo.role
                        });
                }

            }
            if (snapshotData.snapshot.teamInfo.Team1 != null)
            {
                var team1 = snapshotData.snapshot.teamInfo.Team1;
                foreach (KeyValuePair<string, JToken> x in team1.players)
                {
                    TeamPlayer playerInfo = x.Value.ToObject<TeamPlayer>();

                    team1Data.Add(
                        new playersData
                        {
                            playerId = ulong.Parse(x.Key.ToString()),
                            name = playerInfo.Name,
                            kills = playerInfo.kills,
                            deaths = playerInfo.deaths,
                            score = playerInfo.score,
                            tag = playerInfo.tag,
                            squad = playerInfo.squad,
                            role = playerInfo.role
                        });
                }

            }
            else
            {
                team1Data.Add(empty);
            }

            if (snapshotData.snapshot.teamInfo.Team2 != null)
            {
                var team2 = snapshotData.snapshot.teamInfo.Team2;
                foreach (KeyValuePair<string, JToken> x in team2.players)
                {
                    TeamPlayer playerInfo = x.Value.ToObject<TeamPlayer>();

                    team2Data.Add(
                        new playersData
                        {
                            playerId = ulong.Parse(x.Key.ToString()),
                            name = playerInfo.Name,
                            kills = playerInfo.kills,
                            deaths = playerInfo.deaths,
                            score = playerInfo.score,
                            tag = playerInfo.tag,
                            squad = playerInfo.squad,
                            role = playerInfo.role
                        });
                }

            }
            else
            {
                team2Data.Add(empty);
            }
            //SORT TEAM DATA BY SCORE
            team1Data = team1Data.OrderByDescending(x => x.score).ToList();
            team2Data = team2Data.OrderByDescending(x => x.score).ToList();
            //Copy snapshotData to snapshotSend
            //--------------COPY---------------
            //repackage all data into CustomSnapshotRoot
            int team1Tickets = 0;
            int team2Tickets = 0;
            int team1TicketsMax = 0;
            int team2TicketsMax = 0;
            if (snapshotData.snapshot.Conquest != null)
            {
                team1Tickets = snapshotData.snapshot.Conquest.Team1.tickets;
                team1TicketsMax = snapshotData.snapshot.Conquest.Team1.ticketsMax;
                team2Tickets = snapshotData.snapshot.Conquest.Team2.tickets;
                team2TicketsMax = snapshotData.snapshot.Conquest.Team2.ticketsMax;
            }
            else if (snapshotData.snapshot.Deathmatch != null)
            {
                team1Tickets = snapshotData.snapshot.Deathmatch.Team1.Kills;
                team1TicketsMax = snapshotData.snapshot.Deathmatch.Team1.KillsMax;
                team2Tickets = snapshotData.snapshot.Deathmatch.Team2.Kills;
                team2TicketsMax = snapshotData.snapshot.Deathmatch.Team2.KillsMax;
            }
            try
            {
                snapshotSend = new CustomSnapshotRoot
                {
                    lastUpdated = snapshotData.lastUpdated,
                    snapshot = new CustomSnapshot
                    {
                        status = snapshotData.snapshot.status,
                        gameId = snapshotData.snapshot.gameId,
                        currentMap = snapshotData.snapshot.currentMap,
                        maxPlayers = snapshotData.snapshot.maxPlayers,
                        waitingPlayers = snapshotData.snapshot.waitingPlayers,
                        roundTime = snapshotData.snapshot.roundTime,
                        gameMode = snapshotData.snapshot.gameMode,
                        mapId = playersOnServerData.map,
                        modeId = playersOnServerData.mapMode,
                        team1Tickets = new modeCounter
                        {
                            tickets = team1Tickets,
                            ticketsMax = team1TicketsMax
                        },
                        team2Tickets = new modeCounter
                        {
                            tickets = team2Tickets,
                            ticketsMax = team2TicketsMax
                        },
                        teamInfo = new CustomSnapshotTeamInfo
                        {
                            team0 = new CustomSnapshotTeam
                            {
                                faction = snapshotData.snapshot.teamInfo.Team0.faction,
                                player = team0Data
                            },
                            team1 = new CustomSnapshotTeam
                            {
                                faction = snapshotData.snapshot.teamInfo.Team1.faction,
                                player = team1Data
                            },
                            team2 = new CustomSnapshotTeam
                            {
                                faction = snapshotData.snapshot.teamInfo.Team2.faction,
                                player = team2Data
                            }
                        }
                    }
                };
            }
            catch (Exception ex)
            {
                CLogging.AddLog(ex.ToString());
            }
            if((team0Data.Count + team1Data.Count + team2Data.Count) < 1)
            {
                return null;
            }
            return snapshotSend;
        }
 public ScoreboardRenderer(XAML.Scoreboard parent, string mapID, CustomSnapshotRoot root, string teamlogo1 = "", string teamlogo2 = "")
 {
     ScoreboardRenderer1(parent, mapID, root, teamlogo1, teamlogo2);
 }
Esempio n. 4
0
 public DataExport(List<Classes.CustomSnapshotRoot> root, CustomSnapshotRoot check)
 {
     PotentialSave = root;
     checkR = check;
 }