internal static GameFinishedView BuildGameFinishedView(Game game) { var gameFinishedView = new GameFinishedView(); var currentValues = new Dictionary <EffectCategory, int>(); foreach (var initialValue in game.InitialValues) { currentValues[initialValue.Key] = initialValue.Value; } foreach (var madeDecision in game.Decisions) { var phaseResult = new PhaseResultDto() { DecisionMarkdownText = madeDecision.DecisionMarkdownText, ExplanationMarkdownText = madeDecision.ExplanationMarkdownText, }; var newValues = new Dictionary <EffectCategory, int>(); foreach (var currentValue in currentValues) { var category = currentValue.Key; var value = currentValue.Value; var effects = madeDecision.Effects.Where(a => a.EffectCategory == category); var decisionImpact = new DecisionImpactDto() { Impact = new ImpactDto() { OldValue = value, NewValue = value }, ImpactCategoryEnum = category }; if (effects.Any()) { foreach (var effect in effects) { decisionImpact.Impact.Change += effect.Value; decisionImpact.Impact.NewValue += effect.Value; newValues[category] = decisionImpact.Impact.NewValue; } } else { newValues[category] = decisionImpact.Impact.OldValue; } phaseResult.DecisionImpacts.Add(decisionImpact); } currentValues = newValues; gameFinishedView.PhaseResults.Add(phaseResult); } var gameResult = new GameResultDto(); foreach (var endValue in currentValues) { var category = endValue.Key; var endVal = endValue.Value; var initialValue = game.InitialValues[category]; var decisionImpact = new DecisionImpactDto() { Impact = new ImpactDto() { OldValue = initialValue, NewValue = endVal, Change = endVal - initialValue } , ImpactCategoryEnum = category }; gameResult.DecisionImpacts.Add(decisionImpact); } gameFinishedView.GameResult = gameResult; return(gameFinishedView); }
public void Awake() { instance = this; }