// Get our score in terms of number of stars. // Generally rounds down public static int CalcScoreStars(PartyState state, List <IRequirement> requirements) { var scorePercentage = CalcScorePercentage(state, requirements); // Take the score as a percentage (ex: 0.8) // Add epsilon to account for floating point error (Ex: 0.999 should be 1.x). Important because we floor the value later // Multiply by the max score (0.8 * 3 = 2.4) // Floor it to get the number of stars (2.4 => 2) int total = (int)Math.Floor((scorePercentage + float.Epsilon) * MaxScoreStars); return(total); }
// Returns a list of feedback strings public static List <string> GetFeedbackStrings(PartyState state, List <IRequirement> requirements) { var reqContext = new RequirementContext() { partyState = state }; var feedback = new List <String>(); for (int i = 0; i < requirements.Count; ++i) { var req = requirements[i]; if (!req.IsMet(reqContext)) { feedback.Add(req.FeedbackMessage); } } return(feedback); }
// Returns a number between 0 and 1, representing the percentage score accomplished by the state passed in // Total point value is determined by the combined value of all requirements public static float CalcScorePercentage(PartyState state, List <IRequirement> requirements) { var reqContext = new RequirementContext() { partyState = state }; int maxScore = 0; int evalScore = 0; for (int i = 0; i < requirements.Count; ++i) { var req = requirements[i]; maxScore += req.Value; if (req.IsMet(reqContext)) { evalScore += req.Value; } } return((float)evalScore / maxScore); }