예제 #1
0
            public PracticeReplacer(Th06Converter parent)
            {
                this.evaluator = new MatchEvaluator(match =>
                {
                    var level = LevelParser.Parse(match.Groups[1].Value);
                    var chara = CharaParser.Parse(match.Groups[2].Value);
                    var stage = StageParser.Parse(match.Groups[3].Value);

                    if (level == Level.Extra)
                    {
                        return(match.ToString());
                    }
                    if (stage == Stage.Extra)
                    {
                        return(match.ToString());
                    }

                    var key = new CharaLevelPair(chara, level);
                    if (parent.allScoreData.PracticeScores.ContainsKey(key))
                    {
                        var scores = parent.allScoreData.PracticeScores[key];
                        return(scores.ContainsKey(stage)
                            ? Utils.ToNumberString(scores[stage].HighScore) : "0");
                    }
                    else
                    {
                        return("0");
                    }
                });
            }
예제 #2
0
            public ClearReplacer(Th06Converter parent)
            {
                this.evaluator = new MatchEvaluator(match =>
                {
                    var level = LevelParser.Parse(match.Groups[1].Value);
                    var chara = CharaParser.Parse(match.Groups[2].Value);

                    var key = new CharaLevelPair(chara, level);
                    if (parent.allScoreData.Rankings.ContainsKey(key))
                    {
                        var stageProgress =
                            parent.allScoreData.Rankings[key].Max(rank => rank.StageProgress);
                        if (stageProgress == StageProgress.Extra)
                        {
                            return("Not Clear");
                        }
                        else
                        {
                            return(stageProgress.ToShortName());
                        }
                    }
                    else
                    {
                        return(StageProgress.None.ToShortName());
                    }
                });
            }
예제 #3
0
            public ScoreReplacer(Th06Converter parent)
            {
                this.evaluator = new MatchEvaluator(match =>
                {
                    var level = LevelParser.Parse(match.Groups[1].Value);
                    var chara = CharaParser.Parse(match.Groups[2].Value);
                    var rank  = Utils.ToZeroBased(
                        int.Parse(match.Groups[3].Value, CultureInfo.InvariantCulture));
                    var type = int.Parse(match.Groups[4].Value, CultureInfo.InvariantCulture);

                    var key   = new CharaLevelPair(chara, level);
                    var score = parent.allScoreData.Rankings.ContainsKey(key)
                        ? parent.allScoreData.Rankings[key][rank] : InitialRanking[rank];

                    switch (type)
                    {
                    case 1:         // name
                        return(Encoding.Default.GetString(score.Name).Split('\0')[0]);

                    case 2:         // score
                        return(Utils.ToNumberString(score.Score));

                    case 3:         // stage
                        return(score.StageProgress.ToShortName());

                    default:        // unreachable
                        return(match.ToString());
                    }
                });
            }
            public void Set(HighScore score)
            {
                var key = new CharaLevelPair(score.Chara, score.Level);

                if (!this.Rankings.ContainsKey(key))
                {
                    this.Rankings.Add(key, new HighScore[5]);
                }
                if ((0 <= score.Rank) && (score.Rank < 5))
                {
                    this.Rankings[key][score.Rank] = score;
                }
            }
예제 #5
0
            public void Set(HighScore score)
            {
                var key = new CharaLevelPair(score.Chara, score.Level);

                if (!this.Rankings.ContainsKey(key))
                {
                    this.Rankings.Add(key, new List <HighScore>(InitialRanking));
                }
                var ranking = this.Rankings[key];

                ranking.Add(score);
                ranking.Sort((lhs, rhs) => rhs.Score.CompareTo(lhs.Score));
                ranking.RemoveAt(ranking.Count - 1);
            }
예제 #6
0
            public void Set(PracticeScore score)
            {
                if ((score.Level != Level.Extra) && (score.Stage != Stage.Extra) &&
                    !((score.Level == Level.Easy) && (score.Stage == Stage.St6)))
                {
                    var key = new CharaLevelPair(score.Chara, score.Level);
                    if (!this.PracticeScores.ContainsKey(key))
                    {
                        var numStages = Utils.GetEnumerator <Stage>()
                                        .Where(st => st != Stage.Extra).Count();
                        this.PracticeScores.Add(key, new Dictionary <Stage, PracticeScore>(numStages));
                    }

                    var scores = this.PracticeScores[key];
                    if (!scores.ContainsKey(score.Stage))
                    {
                        scores.Add(score.Stage, score);
                    }
                }
            }