private void kbtnGenerateComplementaryColour_Click(object sender, EventArgs e)
 {
     cpbContrastColour.BackColor = ColourExtensions.GetContrast(cpbBaseColour.BackColor, kchkKeepOpacityValues.Checked);
 }
예제 #2
0
        public override void PopulateGame(ServerGame game)
        {
            if (!Connected)
            {
                return;
            }

            game.Players = new List <ServerPlayer>();

            string sql = "SELECT MAT.colourTeam AS [Colour], MP.score, U.[desc] AS [Pack_Name], " +
                         "cast(C.region as varchar) + '-' + cast(C.site as varchar) + '-' + cast(Member.id as varchar) as [Player_ID], " +
                         "Member.codename AS [Alias], MAT.[desc] AS [Team] " +
                         "FROM MissionPlayer MP " +
                         "LEFT JOIN Unit U ON U.ref = MP.unit " +
                         "LEFT JOIN Member ON Member.ref = MP.member " +
                         "LEFT JOIN Centre C ON C.ref = Member.centre " +
                         "LEFT JOIN Mission ON Mission.ref = MP.mission " +
                         "LEFT JOIN MissionType MT ON MT.ref = Mission.type " +
                         "LEFT JOIN MissionAlignmentTeam MAT ON MAT.alignment = MT.alignment AND MAT.seq = MP.team " +
                         "WHERE Mission.ref = " + game.GameId.ToString() + " AND unitType = 0 " +
                         "ORDER BY score DESC";
            var           cmd    = new SqlCommand(sql, connection);
            SqlDataReader reader = cmd.ExecuteReader();

            try
            {
                while (reader.Read())
                {
                    ServerPlayer player = new ServerPlayer
                    {
                        Colour = ColourExtensions.ToColour(reader.GetInt32(0)),
                        Score  = reader.GetInt32(1),
                        Pack   = reader.GetString(2)
                    };
                    if (!reader.IsDBNull(3))
                    {
                        player.PlayerId = reader.GetString(3);
                    }
                    if (!reader.IsDBNull(4))
                    {
                        player.Alias = reader.GetString(4);
                    }
                    player.ServerPlayerId = player.Alias;
                    game.Players.Add(player);
                }
            }
            finally
            {
                reader.Close();
            }

            if (string.IsNullOrEmpty(LogFolder) || !Directory.Exists(LogFolder))
            {
                return;
            }

            var files = new DirectoryInfo(LogFolder).GetFiles(game.Time.ToString("HHmm") + " - *.txt");

            if (files.Length > 0)
            {
                var file = files[0].OpenText();
                game.Events.Clear();
                while (!file.EndOfStream)
                {
                    // Line format: number of milliseconds elapsed in game [tab] event code [tab] teamcolour:playeralias [tab] event description [tab] teamcolour:playeralias

                    var line = file.ReadLine().Split('\t');

                    var oneEvent = new Event
                    {
                        Time = game.Time.AddMilliseconds(int.Parse(line[0]))
                    };

                    string eventType = line[1];
                    if (eventType.StartsWith("01"))
                    {
                        continue;
                    }

                    oneEvent.Event_Type = ParseEventType(line[1]);
                    oneEvent.Score      = EventToScore(oneEvent.Event_Type);

                    SplitPlayer(line[2], out oneEvent.ServerTeamId, out oneEvent.ServerPlayerId);
                    if (line.Length > 4)
                    {
                        SplitPlayer(line[4], out oneEvent.OtherTeam, out oneEvent.OtherPlayer);
                    }

                    if (eventType.StartsWith("0B"))
                    {
                        oneEvent.ShotsDenied = 1;
                    }

                    game.Events.Add(oneEvent);

                    if (eventType.StartsWith("02"))                      // The event is a player hitting another player. Let's create a complementary event to record that same hit from the other player's perspective.
                    {
                        game.Events.Add(new Event
                        {
                            Time       = oneEvent.Time,
                            Event_Type = oneEvent.Event_Type + 14,
                            Score      = -40,

                            ServerTeamId   = oneEvent.OtherTeam,
                            ServerPlayerId = oneEvent.OtherPlayer,
                            OtherTeam      = oneEvent.ServerTeamId,
                            OtherPlayer    = oneEvent.ServerPlayerId
                        });
                    }
                }
            }
        }