Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public void Awake()
 {
     instance = this;
 }