コード例 #1
0
ファイル: Mission.cs プロジェクト: dzemenu/Norad-Eduapp4syria
        public ActivityScore EvaluateActivity(ActivityResult activityResult, ActivityScore[] completedActivities, MissionScore score)
        {
            var previous = completedActivities.LastOrDefault();

            var currentScore = score.GetScore(activityResult.ActivityType);

            var prevActivityScore = previous != null ? previous.Score : 0;
            var activityScore     = CalculateScoreFor(activityResult);

            var p        = P.Unchanged;
            var newScore = currentScore.Add(30);

            if (activityScore > prevActivityScore)
            {
                p = P.Improved;
            }
            else if (activityScore < prevActivityScore)
            {
                p = P.Detoriated;
            }

            // todo: but it won't be fair to get +10 if you didn't complete the activity...score could be 0,0,0,0 and you rack up +10's
            // Ultimately, basing mission percentage strictly off P+, P= and =- is flawed, I think. Should factor in activityScore in a different way?
            switch (activityResult.Result)
            {
            case ActivityResultKind.GaveUp:
            case ActivityResultKind.UnableToComplete:
                newScore = currentScore.Add(-10);
                p        = P.Detoriated;
                break;
            }

            var nextActivity = _availableActivities.GetNextActivityType(score, newScore, activityResult, p);

            return(new ActivityScore(activityResult, activityScore, newScore, p, nextActivity));
        }