Пример #1
0
        /// <summary>
        /// Menu item to open a file dialog and process the data file.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void loadStudentToolStripMenuItem_Click(object sender, EventArgs e)
        {
            /* make sure the list is clear */
            lstScores.Items.Clear();

            /* present the file open dialog */
            var btn = openFileDialog1.ShowDialog();

            if (btn == DialogResult.OK)
            {
                var filePath = openFileDialog1.FileName;

                try
                {
                    GradeHelper helper = new GradeHelper(filePath);
                    var         grades = helper.Read();

                    /* now that we have the grades, generate the score */
                    grades.CalculateGpa();

                    PopulateForm(grades);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error");
                }
            }
        }
Пример #2
0
        /// <summary>
        ///     Converts an OnlineScoreboardScore to a local score.
        /// </summary>
        /// <param name="score"></param>
        /// <returns></returns>
        public static Score FromOnlineScoreboardScore(OnlineScoreboardScore score)
        {
            // Unix timestamp is seconds past epoch
            var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);

            dtDateTime = dtDateTime.AddSeconds(score.Timestamp / 1000f).ToLocalTime();

            var localScore = new Score()
            {
                IsOnline          = true,
                Id                = score.Id,
                SteamId           = score.SteamId,
                MapMd5            = score.MapMd5,
                Name              = score.Username,
                DateTime          = dtDateTime.ToString(CultureInfo.InvariantCulture),
                Mode              = score.Mode,
                TotalScore        = score.TotalScore,
                PerformanceRating = score.PerformanceRating,
                Grade             = GradeHelper.GetGradeFromAccuracy((float)score.Accuracy),
                Accuracy          = score.Accuracy,
                MaxCombo          = score.MaxCombo,
                CountMarv         = score.CountMarv,
                CountPerf         = score.CountPerf,
                CountGreat        = score.CountGreat,
                CountGood         = score.CountGood,
                CountOkay         = score.CountOkay,
                CountMiss         = score.CountMiss,
                Mods              = score.Mods
            };

            return(localScore);
        }
Пример #3
0
        /// <summary>
        ///     Creates a local score object from a score processor.
        /// </summary>
        /// <param name="processor"></param>
        /// <param name="md5"></param>
        /// <param name="name"></param>
        /// <param name="scrollSpeed"></param>
        /// <returns></returns>
        public static Score FromScoreProcessor(ScoreProcessor processor, string md5, string name, int scrollSpeed, int pauseCount)
        {
            var score = new Score()
            {
                MapMd5             = md5,
                Name               = name,
                DateTime           = $"{System.DateTime.Now.ToShortDateString()} {System.DateTime.Now.ToShortTimeString()}",
                Mode               = processor.Map.Mode,
                TotalScore         = processor.Score,
                Grade              = processor.Failed ? Grade.F : GradeHelper.GetGradeFromAccuracy(processor.Accuracy),
                Accuracy           = processor.Accuracy,
                MaxCombo           = processor.MaxCombo,
                CountMarv          = processor.CurrentJudgements[Judgement.Marv],
                CountPerf          = processor.CurrentJudgements[Judgement.Perf],
                CountGreat         = processor.CurrentJudgements[Judgement.Great],
                CountGood          = processor.CurrentJudgements[Judgement.Good],
                CountOkay          = processor.CurrentJudgements[Judgement.Okay],
                CountMiss          = processor.CurrentJudgements[Judgement.Miss],
                Mods               = processor.Mods,
                ScrollSpeed        = scrollSpeed,
                PauseCount         = pauseCount,
                JudgementBreakdown = GzipHelper.Compress(processor.GetJudgementBreakdown()),
            };

            return(score);
        }
Пример #4
0
 /// <summary>
 ///     Creates the grade of the score
 /// </summary>
 private void CreateGrade() => Grade = new Sprite()
 {
     Parent    = this,
     Alignment = Alignment.MidRight,
     X         = -50,
     Size      = new ScalableVector2(100, 100),
     Image     = Screen.ScoreProcessor.Failed ? SkinManager.Skin.Grades[API.Enums.Grade.F] :
                 SkinManager.Skin.Grades[GradeHelper.GetGradeFromAccuracy(Screen.ScoreProcessor.Accuracy)]
 };
        double Help(GradeHelper t, double[] grades, ref double secondsElapsed)
        {
            Timing timer = new Timing();

            timer.StartTime();

            var result = t(grades);

            timer.StopTIme();
            var dur = timer.Result();

            secondsElapsed = dur.TotalMilliseconds / 1000.0;
            return(result);
        }
Пример #6
0
        private void BtnFolder_Click(object sender, RoutedEventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();

            if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                var path = folderBrowserDialog.SelectedPath;
                tbFileName.Text = path;
                //所有年级所有班级的所有科目成绩
                var datas = ExcelHelper.GetExcelFiles(path);
                foreach (var d in datas)
                {
                    var rankGrade  = new RankGradeEntity();
                    var allList    = new List <SubjectEntity>();
                    var sourceFile = Path.Combine(System.Windows.Forms.Application.StartupPath, "Result.xlsx");
                    var destPath   = $@"{path}\Result";
                    var destFile   = $@"{destPath}\{d.Id}_{DateTime.Now:yyyyMMdd_HHmmss}.xlsx";
                    if (!Directory.Exists(destPath))
                    {
                        Directory.CreateDirectory(destPath);
                    }
                    File.Copy(sourceFile, destFile, true);

                    foreach (GradeEnum.SubjectName n in Enum.GetValues(typeof(GradeEnum.SubjectName)))
                    {
                        GradeHelper.GetEntitiesByExcelDatas(d, ref rankGrade, n);
                        //每一科目list写入excel
                        //TODO
                        rankGrade.RankDict.TryGetValue(n.ToString(), out List <SubjectEntity> list);
                        var sort     = 1;
                        var sortList = list.OrderByDescending(l => l.StandGrade).ToList();
                        sortList.ForEach(s => s.ClassSort = sort++);
                        allList = allList.Concat(sortList).ToList();
                        //ExcelHelper.ToExcel(destFile, sortList, "result");
                        //list.OrderByDescending(l => l.StandGrade).ToList().ForEach(l => allList.Add(l));
                    }
                    ExcelHelper.ToExcel(destFile, allList, "result", 3);
                    //
                    BindsList(d, allList);
                    //rankGrade.RankDict.TryGetValue("数学", out List<SubjectEntity> list);
                    //m_dataGrid.ItemsSource = allList;
                    //ExcelHelper.ToExcel();
                }
            }
            System.Windows.MessageBox.Show("计算完毕并保存文件成功");
        }
Пример #7
0
        /// <summary>
        ///     Changes discord rich presence to show results.
        /// </summary>
        private void ChangeDiscordPresence()
        {
            DiscordHelper.Presence.EndTimestamp = 0;

            // Don't change if we're loading in from a replay file.
            if (ResultsType == ResultScreenType.Replay || Gameplay.InReplayMode)
            {
                DiscordHelper.Presence.Details = "Idle";
                DiscordHelper.Presence.State   = "In the Menus";
                DiscordRpc.UpdatePresence(ref DiscordHelper.Presence);
                return;
            }

            var state = Gameplay.Failed ? "Fail" : "Pass";
            var score = $"{ScoreProcessor.Score / 1000}k";
            var acc   = $"{StringHelper.AccuracyToString(ScoreProcessor.Accuracy)}";
            var grade = Gameplay.Failed ? "F" : GradeHelper.GetGradeFromAccuracy(ScoreProcessor.Accuracy).ToString();
            var combo = $"{ScoreProcessor.MaxCombo}x";

            if (OnlineManager.CurrentGame == null)
            {
                DiscordHelper.Presence.State = $"{state}: {grade} {score} {acc} {combo}";
            }
            else
            {
                if (OnlineManager.CurrentGame.Ruleset == MultiplayerGameRuleset.Team)
                {
                    var redTeamAverage  = GetTeamAverage(MultiplayerTeam.Red);
                    var blueTeamAverage = GetTeamAverage(MultiplayerTeam.Blue);

                    DiscordHelper.Presence.State = $"Red: {redTeamAverage:0.00} vs. Blue: {blueTeamAverage:0.00}";
                }
                else
                {
                    DiscordHelper.Presence.State = $"{StringHelper.AddOrdinal(MultiplayerScores.First().Rank)} " +
                                                   $"Place: {MultiplayerScores.First().RatingProcessor.CalculateRating(ScoreProcessor):0.00} {acc} {grade}";
                }
            }

            DiscordRpc.UpdatePresence(ref DiscordHelper.Presence);
        }
Пример #8
0
        /// <summary>
        ///     Changes discord rich presence to show results.
        /// </summary>
        private void ChangeDiscordPresence()
        {
            DiscordHelper.Presence.EndTimestamp = 0;

            // Don't change if we're loading in from a replay file.
            if (ResultsType == ResultScreenType.Replay || Gameplay.InReplayMode)
            {
                DiscordHelper.Presence.Details = "Idle";
                DiscordHelper.Presence.State   = "In the Menus";
                DiscordRpc.UpdatePresence(ref DiscordHelper.Presence);
                return;
            }

            var state = Gameplay.Failed ? "Fail" : "Pass";
            var score = $"{ScoreProcessor.Score / 1000}k";
            var acc   = $"{StringHelper.AccuracyToString(ScoreProcessor.Accuracy)}";
            var grade = Gameplay.Failed ? "F" : GradeHelper.GetGradeFromAccuracy(ScoreProcessor.Accuracy).ToString();
            var combo = $"{ScoreProcessor.MaxCombo}x";

            DiscordHelper.Presence.State = $"{state}: {grade} {score} {acc} {combo}";
            DiscordRpc.UpdatePresence(ref DiscordHelper.Presence);
        }
Пример #9
0
        /// <summary>
        ///     Creates the grade of the score
        /// </summary>
        private void CreateGrade()
        {
            Texture2D image;

            switch (Screen.ResultsType)
            {
            case ResultScreenType.Replay:
            case ResultScreenType.Gameplay:
                // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression
                if (Screen.ScoreProcessor.Failed)
                {
                    image = SkinManager.Skin.Grades[API.Enums.Grade.F];
                }
                else
                {
                    image = SkinManager.Skin.Grades[GradeHelper.GetGradeFromAccuracy(Screen.ScoreProcessor.Accuracy)];
                }
                break;

            case ResultScreenType.Score:
                image = SkinManager.Skin.Grades[Screen.Score.Grade];
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            Grade = new Sprite()
            {
                Parent    = this,
                Alignment = Alignment.MidRight,
                X         = -50,
                Size      = new ScalableVector2(66, 66),
                Image     = image
            };
        }
        /// <summary>
        ///     Adds data to the row
        ///     <header name, value>
        /// </summary>
        /// <param name="data"></param>
        private void CreateData(Dictionary <string, string> data)
        {
            foreach (var pair in data)
            {
                var header = Header.Headers[pair.Key];

                Sprite val;

                if (pair.Key == "Grade")
                {
                    val = new Sprite()
                    {
                        Parent    = this,
                        Alignment = Alignment.MidRight,
                        Size      = new ScalableVector2(30, 30),
                        Image     = Item.Processor.Failed ? SkinManager.Skin.Grades[Grade.F] : SkinManager.Skin.Grades[GradeHelper.GetGradeFromAccuracy(Item.Processor.Accuracy)],
                        UsePreviousSpriteBatchOptions = true
                    };
                }
                else
                {
                    val = new SpriteTextBitmap(FontsBitmap.GothamRegular, pair.Value)
                    {
                        Parent    = this,
                        Alignment = Alignment.MidRight,
                        FontSize  = 16,
                        UsePreviousSpriteBatchOptions = true
                    };
                }

                if (Item.Type == ScoreboardUserType.Self && val is SpriteTextBitmap t)
                {
                    t.Tint = Colors.SecondaryAccent;
                }

                val.X  = header.X - header.Width / 2f;
                val.X += val.Width / 2f;
            }
        }