/// <summary> /// Create a new instance (in memory and database) of <see cref="T:Business.EliminationStep" /> with specified param /// </summary> /// <param name="phase">Phase linked to this new step</param> /// <param name="teamList">Team involved in this new step</param> /// <param name="matchSetting">Set setting match for new Elimination phase</param> /// <param name="firstStep">Set first step for elimination step</param> /// <returns>EliminationStep's instance</returns> public static IEliminationStep Create(IPhase phase, IList <ITeam> teamList, IMatchSetting matchSetting, EliminationType firstStep) { if (phase == null) { throw new ArgumentNullException(nameof(phase)); } if (teamList == null) { throw new ArgumentNullException(nameof(teamList)); } if (matchSetting == null) { throw new ArgumentNullException(nameof(matchSetting)); } var requiredTeam = (ushort)firstStep * 2; if (teamList.Count != requiredTeam) { throw new ArgumentException( $"La première étape de la phase éliminatoire ne correspond pas au nombre équipe fourni. Nombre d'équipe requise:{requiredTeam}. Nombre d'équipe:{teamList.Count}"); } var result = new EliminationStep(phase, teamList, matchSetting) { Type = firstStep }; return(result); }
/// <summary> /// Determine type of step is after specified type /// </summary> /// <param name="actualStep">Reference to compute next step</param> /// <returns>Next step if exist, else null if is no step after.</returns> public static EliminationType?DetermineNextEliminationStep(EliminationType actualStep) { switch (actualStep) { case EliminationType.SixtyFourthRound: return(EliminationType.ThirtySecondRound); case EliminationType.ThirtySecondRound: return(EliminationType.SixteenthRound); case EliminationType.SixteenthRound: return(EliminationType.QuarterFinal); case EliminationType.QuarterFinal: return(EliminationType.SemiFinal); case EliminationType.SemiFinal: return(EliminationType.Final); case EliminationType.Final: return(null); default: throw new NotSupportedException($"Le type de l'étape n'est pas supporté. Type:{actualStep}."); } }
public static int IndexStep(EliminationType firstStep) { switch (firstStep) { case EliminationType.SixtyFourthRound: return(5); case EliminationType.ThirtySecondRound: return(4); case EliminationType.SixteenthRound: return(3); case EliminationType.QuarterFinal: return(2); case EliminationType.SemiFinal: return(1); case EliminationType.Final: return(0); default: throw new NotSupportedException($"Le type de l'étape n'est pas supporté. Type:{firstStep}."); } }
/// <summary> /// Instance a new QualificationStepSetting with specified param /// </summary> /// <param name="matchSetting">Set match setting for qualification step</param> /// <param name="mainEliminationStep">First eliminiation step for main phase</param> /// <param name="countGroup">Set number of qualification group when type of phase is qualification, else null</param> /// <param name="matchWithRevenche">Set to true if you want two match by team</param> public QualificationStepSetting(MatchSetting matchSetting, ushort countGroup, EliminationType mainEliminationStep, bool matchWithRevenche) : base(matchSetting) { SetCountGroup(countGroup, mainEliminationStep); MatchWithRevenche = matchWithRevenche; }
/// <summary> /// Instance a new QualificationStepSetting with specified param /// </summary> /// <param name="matchSetting">Set match setting for qualification step</param> /// <param name="mainEliminationStep">First eliminiation step for main phase</param> /// <param name="countTeamQualified">Set number team qualified by group when type of phase is qualification, else null</param> /// <param name="matchWithRevenche">Set to true if you want two match by team</param> public QualificationStepSetting(MatchSetting matchSetting, EliminationType mainEliminationStep, ushort countTeamQualified, bool matchWithRevenche) : base(matchSetting) { MatchWithRevenche = matchWithRevenche; SetCountQualifiedTeam(mainEliminationStep, countTeamQualified); }
/// <summary> /// Set value of CountGroup, CountQualifiedTeam and CountFishedTeam in according with business rules /// </summary> /// <param name="mainEliminationStep">First eliminiation step for main phase</param> /// <param name="countGroup">Set number of qualification group when type of phase is qualification, else null</param> public void SetCountGroup(ushort countGroup, EliminationType mainEliminationStep) { ushort countTeamQualified, countTeamFished; ComputeGroup(countGroup, mainEliminationStep, out countTeamQualified, out countTeamFished); CountGroup = countGroup; CountTeamQualified = countTeamQualified; CountTeamFished = countTeamFished; }
/// <summary> /// Instance a new EliminationStepSetting with specified param /// </summary> /// <param name="matchSetting">Set match setting for qualification step</param> /// <param name="firstStep">Set the first step for elimination step</param> public EliminationStepSetting(IMatchSetting matchSetting, EliminationType firstStep) : base(matchSetting) { FirstStep = firstStep; }
public static void ComputeGroup(ushort countGroup, EliminationType eliminationStep, out ushort countTeamQualified, out ushort countFishedTeam) { countTeamQualified = (ushort)((ushort)eliminationStep * 2 / countGroup); countFishedTeam = (ushort)((ushort)eliminationStep * 2 % countGroup); }