[Refactor] Fix GameController
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
using YachtDice.Categories;
|
||||
using YachtDice.Scoring;
|
||||
|
||||
namespace YachtDice.UI.Presentation
|
||||
{
|
||||
public sealed class ScoreSummaryService : IScoreSummaryService
|
||||
{
|
||||
private const int UpperBonusThreshold = 63;
|
||||
private const int UpperBonusValue = 35;
|
||||
|
||||
private readonly ScoringSystem _scoringSystem;
|
||||
private readonly CategoryCatalog _categoryCatalog;
|
||||
|
||||
public ScoreSummaryService(ScoringSystem scoringSystem, CategoryCatalog categoryCatalog)
|
||||
{
|
||||
_scoringSystem = scoringSystem;
|
||||
_categoryCatalog = categoryCatalog;
|
||||
}
|
||||
|
||||
public ScoreSummary Calculate()
|
||||
{
|
||||
var upperSum = CalculateUpperSum();
|
||||
var hasUpperBonus = upperSum >= UpperBonusThreshold;
|
||||
|
||||
var total = _scoringSystem.TotalScore;
|
||||
if (hasUpperBonus)
|
||||
total += UpperBonusValue;
|
||||
|
||||
return new ScoreSummary(total, upperSum, hasUpperBonus);
|
||||
}
|
||||
|
||||
private int CalculateUpperSum()
|
||||
{
|
||||
var upperSum = 0;
|
||||
var allCategories = _categoryCatalog.All;
|
||||
|
||||
for (var i = 0; i < allCategories.Count; i++)
|
||||
{
|
||||
var category = allCategories[i];
|
||||
if (!category.IsUpperSection)
|
||||
continue;
|
||||
|
||||
var categoryScore = _scoringSystem.GetCategoryScore(category);
|
||||
if (categoryScore >= 0)
|
||||
upperSum += categoryScore;
|
||||
}
|
||||
|
||||
return upperSum;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user