public HoleResult GetHoleResult(Hole hole) { HoleResult result = new HoleResult(); if (hole.Shots != null && hole.Shots.Any()) { result.IsEmpty = false; //Get the last shot var shot = hole.Shots.FirstOrDefault(s => s.ShotMade == true || s.ShotType.Id == 3); //If it was made, see if it was a push, steal if (shot != null && shot.ShotMade == true) { result.Shot = shot; result.LastPlayer = shot.Player; //If a push switch (shot.ShotType.Id) { case 1 : result.FirstPlayer = null; result.Points = hole.Par; break; case 3 : var pushedShot = hole.Shots.FirstOrDefault(s => s.Attempts == shot.Attempts && s.Id != shot.Id && s.ShotMade == true); result.FirstPlayer = pushedShot.Player; break; case 4 : var stolenShot = hole.Shots.LastOrDefault(s => s.Attempts > shot.Attempts && s.ShotMade == true); result.FirstPlayer = stolenShot.Player; result.Points = hole.Par; break; //Try and find the players who pushed the hole case 5 : var lastPushedShot = hole.Shots.LastOrDefault(s => s.ShotMade == true && s.Attempts > shot.Attempts); var firstPushedShot = hole.Shots.LastOrDefault(s => s.ShotMade == true && s.Attempts == lastPushedShot.Attempts && s.Id != lastPushedShot.Id); result.FirstPlayer = new Player() { Initials = lastPushedShot.Player.Initials + "/" + firstPushedShot.Player.Initials }; result.Points = hole.Par; break; default : result.FirstPlayer = null; break; } if (result.Points > 0) { //loop through previous holes adding up score until last winning shot. for (int i = hole.Id - 1; i > 0; i--) { var previousHole = Holes.FirstOrDefault(h => h.Id == i); //Check for push if ((previousHole.Shots.Count(s => s.ShotMade == true && s.ShotType.Id == 3) > 0) || previousHole.Shots.Count(s => s.ShotMade == true) == 0) { result.Points += previousHole.Par; } else { break; } } } } } return result; }
public HoleResult GetHoleResult(Hole hole) { HoleResult result = new HoleResult(); if (hole.Shots != null && hole.Shots.Any()) { result.IsEmpty = false; //Get the last shot var shot = hole.Shots.FirstOrDefault(s => s.ShotMade == true || s.ShotType.Id == 3); //If it was made, see if it was a push, steal if (shot != null && shot.ShotMade == true) { result.Shot = shot; result.LastPlayer = shot.Player; //If a push switch (shot.ShotType.Id) { case 1: result.FirstPlayer = null; result.Points = hole.Par; break; case 3: var pushedShot = hole.Shots.FirstOrDefault(s => s.Attempts == shot.Attempts && s.Id != shot.Id && s.ShotMade == true); result.FirstPlayer = pushedShot.Player; break; case 4: var stolenShot = hole.Shots.LastOrDefault(s => s.Attempts > shot.Attempts && s.ShotMade == true); result.FirstPlayer = stolenShot.Player; result.Points = hole.Par; break; //Try and find the players who pushed the hole case 5: var lastPushedShot = hole.Shots.LastOrDefault(s => s.ShotMade == true && s.Attempts > shot.Attempts); var firstPushedShot = hole.Shots.LastOrDefault(s => s.ShotMade == true && s.Attempts == lastPushedShot.Attempts && s.Id != lastPushedShot.Id); result.FirstPlayer = new Player() { Initials = lastPushedShot.Player.Initials + "/" + firstPushedShot.Player.Initials }; result.Points = hole.Par; break; default: result.FirstPlayer = null; break; } if (result.Points > 0) { //loop through previous holes adding up score until last winning shot. for (int i = hole.Id - 1; i > 0; i--) { var previousHole = Holes.FirstOrDefault(h => h.Id == i); //Check for push if ((previousHole.Shots.Count(s => s.ShotMade == true && s.ShotType.Id == 3) > 0) || previousHole.Shots.Count(s => s.ShotMade == true) == 0) { result.Points += previousHole.Par; } else { break; } } } } } return(result); }