private static TeamEvaluation EvaluateTeam(World world, int team)
        {
            TeamEvaluation teamEval = new TeamEvaluation();

            teamEval.IsWinner         = world.Winner() == team;
            teamEval.Gold             = world.Gold[team];
            teamEval.NumMinionsKilled = world.MinionsKilled[team];
            teamEval.NumDenies        = world.Denies[team];
            teamEval.HeroDamageOutput = world.HeroDamageOutput[team];

            foreach (Unit unit in world.Units)
            {
                if (unit.Team == team)
                {
                    if (unit.UnitType == UnitType.Hero)
                    {
                        ++teamEval.NumHeroes;
                        teamEval.HeroHealth += unit.Health;
                        teamEval.Mana       += unit.Mana;

                        double centerX           = World.MapWidth / 2;
                        double forwardProportion = 1.0 - (Math.Abs(unit.Pos.X - centerX) / (World.MapWidth / 2));
                        teamEval.Forward += forwardProportion;

                        teamEval.StunnedTicks += unit.StunDuration;
                    }
                    else if (unit.UnitType == UnitType.Minion)
                    {
                        teamEval.MinionHealth += unit.Health;
                    }
                    else if (unit.UnitType == UnitType.Tower)
                    {
                        teamEval.TowerHealth += unit.Health;
                    }
                }
            }

            teamEval.Score =
                MinionsKilledFactor * teamEval.NumMinionsKilled +
                DeniesFactor * teamEval.NumDenies +
                ForwardFactor * teamEval.Forward +
                GoldFactor * teamEval.Gold +
                (teamEval.IsWinner ? WinnerFactor : 0) +
                HeroDamageOutputFactor * teamEval.HeroDamageOutput +
                NumHeroesFactor * teamEval.NumHeroes +
                HeroHealthFactor * teamEval.HeroHealth +
                HeroManaFactor * teamEval.Mana +
                StunnedFactor * teamEval.StunnedTicks +
                MinionHealthFactor * teamEval.MinionHealth +
                TowerHealthFactor * teamEval.TowerHealth;
            return(teamEval);
        }
Ejemplo n.º 2
0
        public ActionResult SubmitTeamEvaluation(int assignmentId)
        {
            Assignment      assignment = db.Assignments.Find(assignmentId);
            IAssignmentTeam pAt;

            if (assignment.PreceedingAssignment.Type == AssignmentTypes.DiscussionAssignment)
            {
                pAt = GetDiscussionTeam(assignment.PreceedingAssignment, ActiveCourseUser);
            }
            else
            {
                pAt = GetAssignmentTeam(assignment.PreceedingAssignment, ActiveCourseUser);
            }

            List <TeamEvaluation> existingTeamEvaluations = (from te in db.TeamEvaluations
                                                             where te.TeamEvaluationAssignmentID == assignmentId &&
                                                             te.EvaluatorID == ActiveCourseUser.ID
                                                             select te).ToList();

            int existingCommentID = (from C in existingTeamEvaluations
                                     where C.CommentID != 0
                                     select C.CommentID).FirstOrDefault();
            TeamEvaluationComment tec;

            if (existingCommentID != 0) //Comment already existed. Modify that and use that.
            {
                tec = (from tc in db.TeamEvaluationComments
                       where tc.ID == existingCommentID
                       select tc).FirstOrDefault();


                tec.Comment = Convert.ToString(Request.Params["inBrowserText"]);
                db.SaveChanges();
            }
            else //using new comment
            {
                tec         = new TeamEvaluationComment();
                tec.Comment = Convert.ToString(Request.Params["inBrowserText"]);
                db.TeamEvaluationComments.Add(tec);
                db.SaveChanges();
            }

            List <int> TeamEvalPoints = new List <int>();

            //Creating or editing TeamEvaluations for each team member from the previous assignment assignment team
            //since the team could be a discussion team, only select team members who are students.
            foreach (TeamMember tm in pAt.Team.TeamMembers.Where(tm => tm.CourseUser.AbstractRoleID == (int)CourseRole.CourseRoles.Student))
            {
                TeamEvaluation te = (from eval in existingTeamEvaluations
                                     where eval.RecipientID == tm.CourseUserID
                                     select eval).FirstOrDefault();

                string param       = "points-" + tm.CourseUserID;
                int    paramPoints = Convert.ToInt32(Request.Params[param]);
                TeamEvalPoints.Add(paramPoints);

                if (te == null) //No TE exists, create one
                {
                    TeamEvaluation newTE = new TeamEvaluation();
                    newTE.TeamEvaluationAssignmentID = assignmentId;
                    newTE.AssignmentUnderReviewID    = (int)assignment.PrecededingAssignmentID;
                    newTE.EvaluatorID = ActiveCourseUser.ID;
                    newTE.RecipientID = tm.CourseUserID;
                    newTE.Points      = paramPoints;
                    newTE.CommentID   = tec.ID;

                    db.TeamEvaluations.Add(newTE);
                }
                else //TE exists, modify it
                {
                    te.CommentID = tec.ID;
                    te.Points    = paramPoints;
                }
            }

            if (assignment.TeamEvaluationSettings.DiscrepancyCheckSize > 0 && (TeamEvalPoints.Max() - TeamEvalPoints.Min()) > assignment.TeamEvaluationSettings.DiscrepancyCheckSize)
            {
                (new NotificationController()).SendTeamEvaluationDiscrepancyNotification(pAt.TeamID, assignment);
            }

            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Ejemplo n.º 3
0
        public ActionResult StudentTeamEvaluation(int assignmentId)
        {
            Assignment a = db.Assignments.Find(assignmentId);
            Team       previousTeam;

            if (a.PreceedingAssignment.Type == AssignmentTypes.DiscussionAssignment)
            {
                //Note: This could have non-student types on the team, such as moderators or TAs
                DiscussionTeam dt = GetDiscussionTeam(a.PreceedingAssignment, ActiveCourseUser);
                previousTeam             = new Team();
                previousTeam.TeamMembers = dt.Team.TeamMembers.Where(tm => tm.CourseUser.AbstractRoleID == (int)CourseRole.CourseRoles.Student).ToList();
            }
            else
            {
                previousTeam = GetAssignmentTeam(a.PreceedingAssignment, ActiveCourseUser).Team;
            }
            AssignmentTeam at = GetAssignmentTeam(a, ActiveCourseUser);

            if (at != null && a.Type == AssignmentTypes.TeamEvaluation)
            {
                ViewBag.AssignmentTeam = at;
                ViewBag.PreviousTeam   = previousTeam;

                List <TeamEvaluation> teamEvals = (from te in db.TeamEvaluations
                                                   where
                                                   te.TeamEvaluationAssignmentID == assignmentId &&
                                                   te.EvaluatorID == ActiveCourseUser.ID
                                                   orderby te.Recipient.UserProfile.LastName
                                                   select te).ToList();
                //MG: evaluator (currentuser) must have completed at as many evaluations as team members from the previous assignment.
                //Otherwise, use artificial team evals for view
                if (teamEvals.Count < previousTeam.TeamMembers.Count) //Creating new team eval
                {
                    List <TeamEvaluation> artificialTeamEvals = new List <TeamEvaluation>();

                    foreach (TeamMember tm in previousTeam.TeamMembers.OrderBy(tm2 => tm2.CourseUser.UserProfile.LastName))
                    {
                        TeamEvaluation te = new TeamEvaluation();
                        te.Points    = 0;
                        te.Recipient = tm.CourseUser;
                        artificialTeamEvals.Add(te);
                    }
                    ViewBag.SubmitButtonValue     = "Submit";
                    ViewBag.TeamEvaluations       = artificialTeamEvals;
                    ViewBag.InitialPointsPossible = previousTeam.TeamMembers.Count * 100;
                }
                else //using existing team evals
                {
                    ViewBag.InitialPointsPossible = 0; //Must be 0 as we are reloading old TEs, and requirements for submitting initially are that points possible must be 0
                    ViewBag.Comment           = teamEvals.FirstOrDefault().Comment;
                    ViewBag.SubmitButtonValue = "Resubmit";
                    ViewBag.TeamEvaluations   = teamEvals;
                }

                return(View("_StudentTeamEvaluationView"));
            }
            else
            {
                return(View("Index"));
            }
        }