public void Allocate( RushUnit ru, int nTDr, PlayerGameMetricsCollection pgms) { if (nTDr == 0) { return; } foreach (var starter in ru.Starters) { int tdsLostToLeakage = nTDr % 2; nTDr -= tdsLostToLeakage; if (nTDr == 0) { break; } var pgm = pgms.GetPgmFor( starter.PlayerCode); pgm.ProjTDr += nTDr / ru.Starters.Count; // 50-50 pgms.Update( pgm); } }
private void AllocateYDr( RushUnit ru, int projYDr, PlayerGameMetricsCollection pgms) { var approach = ru.DetermineApproach(); ydrAllocationStrategies[approach].Allocate(ru, projYDr, pgms); }
public void Allocate(RushUnit ru, int nTDr, PlayerGameMetricsCollection pgms) { var pgm = pgms.GetPgmFor(ru.R1.PlayerCode); pgm.PlayerId = ru.R1.PlayerCode; pgm.ProjTDr += nTDr; pgms.Update(pgm); }
private int AllowForR2BeingTheVulture(int projTDr, string r2Id, RushUnit ru) { if (r2Id == ru.GoalLineBack.PlayerCode) { projTDr++; } return(projTDr); }
public void Allocate(RushUnit ru, int nYDr, PlayerGameMetricsCollection pgms) { // aces get 90% var projYDr = ( int )(0.9M * nYDr); var pgm = pgms.GetPgmFor(ru.R1.PlayerCode); pgm.ProjYDr += ( int )(projYDr * ru.R1.HealthFactor()); pgms.Update(pgm); }
public void Allocate(RushUnit ru, int nTDr, PlayerGameMetricsCollection pgms) { foreach (var starter in ru.Starters) { var pgm = pgms.GetPgmFor(starter.PlayerCode); pgm.ProjTDr += nTDr / ru.Starters.Count; pgms.Update(pgm); } }
private void DoRushingUnit( PlayerGameProjectionMessage input, string teamCode, bool isHome) { RushUnit ru; if (isHome) { ru = input.Game.HomeNflTeam.RunUnit; } else { ru = input.Game.AwayNflTeam.RunUnit; } if (ru == null) { ru = new RushUnit(); } if (!ru.IsLoaded()) { ru.Load(teamCode); } var pgms = new PlayerGameMetricsCollection( input.Game); var projTDr = isHome ? input.Prediction.HomeTDr : input.Prediction.AwayTDr; projTDr = AllowForVultures( ru, projTDr, pgms); AllocateTDr( ru, projTDr, pgms); input.Game.PlayerGameMetrics = pgms.Pgms; var projYDr = isHome ? input.Prediction.HomeYDr : input.Prediction.AwayYDr; AllocateYDr( ru, projYDr, pgms); if (ru.ThirdDownBack != null) { var projYDc = ( int )(.05 * (isHome ? input.Prediction.HomeYDp : input.Prediction.AwayYDp)); var pgm = pgms.GetPgmFor( ru.ThirdDownBack.PlayerCode); pgm.ProjYDc += projYDc; pgms.Update(pgm); } }
private int AllowForVultures(RushUnit ru, int projTDr, PlayerGameMetricsCollection pgms) { var nTDr = projTDr; if (ru.GoalLineBack != null) { var pgm = pgms.GetPgmFor(ru.GoalLineBack.PlayerCode); var vulturedTDs = VulturedTdsFrom(nTDr); pgm.ProjTDr += vulturedTDs; pgms.Update(pgm); nTDr -= vulturedTDs; } return(nTDr); }
public void Allocate(RushUnit ru, int nTDr, PlayerGameMetricsCollection pgms) { if (ru.Starters.Count > 0) { var pgm = pgms.GetPgmFor(ru.R1.PlayerCode); pgm.PlayerId = ru.R1.PlayerCode; // incase its a new one pgm.ProjTDr += R1TdsFrom(nTDr); pgms.Update(pgm); var pgm2 = pgms.GetPgmFor(ru.R2.PlayerCode); pgm2.PlayerId = ru.R2.PlayerCode; // incase its a new one pgm2.ProjTDr += R2TdsFrom(nTDr); pgms.Update(pgm2); } }
private void DoRushingUnit(PlayerGameProjectionMessage input, string teamCode, bool isHome) { var ru = new RushUnit(); ru.Load(teamCode); if (ru.IsAceBack) { // R1 var percentageOfAction = 0.7M; if (ru.R2 == null) { percentageOfAction = 0.9M; } var projYDr = (int)(percentageOfAction * ((isHome) ? input.Prediction.HomeYDr : input.Prediction.AwayYDr)); // Injury penalty projYDr = AllowForInjuryRisk(ru.AceBack, projYDr); var projTDrAce = R1TdsFrom((isHome) ? input.Prediction.HomeTDr : input.Prediction.AwayTDr); var isVulture = AllowForVulturing(ru.AceBack.PlayerCode, ref projTDrAce, ru); AddPlayerGameMetric(input, ru.AceBack.PlayerCode, projYDr, projTDrAce); // R2 optional if (ru.R2 != null) { projYDr = (int)(.2 * ((isHome) ? input.Prediction.HomeYDr : input.Prediction.AwayYDr)); projYDr = AllowForInjuryRisk(ru.AceBack, projYDr); int projTDr = R2TdsFrom((isHome) ? input.Prediction.HomeTDr : input.Prediction.AwayTDr); if (isVulture) { projTDr = AllowForR2BeingTheVulture(projTDr, ru.R2.PlayerCode, ru); } AddPlayerGameMetric(input, ru.R2.PlayerCode, projYDr, projTDr); } } else { // Comittee var percentageOfAction = 0.5M; foreach (var runner in ru.Starters) { var projYDr = (int)(percentageOfAction * ((isHome) ? input.Prediction.HomeYDr : input.Prediction.AwayYDr)); projYDr = AllowForInjuryRisk(runner, projYDr); var projTDr = R1TdsFrom((isHome) ? input.Prediction.HomeTDr : input.Prediction.AwayTDr); AddPlayerGameMetric(input, runner.PlayerCode, projYDr, projTDr); } } }
private bool AllowForVulturing(string runnerId, ref int projTDr, RushUnit ru) { bool isVulture = false; if (projTDr > 0) { if (ru.GoalLineBack != null) { if (ru.GoalLineBack.PlayerCode != runnerId) { // Vulture projTDr--; isVulture = true; } } } return(isVulture); }
public void Allocate(RushUnit ru, int nYDr, PlayerGameMetricsCollection pgms) { var nStarters = 0; // 45% 45% foreach (var starter in ru.Starters) { var projYDr = ( int )(0.45M * nYDr); var pgm = pgms.GetPgmFor(starter.PlayerCode); pgm.ProjYDr += ( int )(projYDr * starter.HealthFactor()); pgms.Update(pgm); nStarters++; if (nStarters > 2) { break; } } }
public void Allocate(RushUnit ru, int nYDr, PlayerGameMetricsCollection pgms) { if (ru.Runners.Count == 0) { return; } if (ru.Starters.Count > 0) { // 70% 20% var projYDr = ( int )(0.7M * nYDr); var pgm = pgms.GetPgmFor(ru.R1.PlayerCode); pgm.ProjYDr += ( int )(projYDr * ru.R1.HealthFactor()); pgms.Update(pgm); } if (ru.R2 != null) { var projYDr2 = ( int )(0.2M * nYDr); var pgm2 = pgms.GetPgmFor(ru.R2.PlayerCode); pgm2.ProjYDr += projYDr2; pgms.Update(pgm2); } }
private void DoPassingUnit( PlayerGameProjectionMessage input, string teamCode, bool isHome) { PassUnit unit; RushUnit rushUnit; if (isHome) { unit = input.Game.HomeNflTeam.PassUnit; rushUnit = input.Game.HomeNflTeam.RunUnit; } else { unit = input.Game.AwayNflTeam.PassUnit; rushUnit = input.Game.AwayNflTeam.RunUnit; } if (unit == null) { unit = new PassUnit(); } if (!unit.IsLoaded()) { unit.Load(teamCode); } if (rushUnit == null) { rushUnit = new RushUnit(); } if (!rushUnit.IsLoaded()) { rushUnit.Load(teamCode); } // give it to the QB if (unit.Q1 != null) { var projYDp = isHome ? input.Prediction.HomeYDp : input.Prediction.AwayYDp; var projTDp = isHome ? input.Prediction.HomeTDp : input.Prediction.AwayTDp; AddPassinglayerGameMetric( input, unit.Q1.PlayerCode, projYDp, projTDp); } // Receivers W1 35%, W2 25%, W3 10%, TE 20% (todo 3D 5%) int projYDc, projTDc; if (unit.W1 != null) { projYDc = ( int )(.35 * (isHome ? input.Prediction.HomeYDp : input.Prediction.AwayYDp)); projTDc = W1TdsFrom( isHome ? input.Prediction.HomeTDp : input.Prediction.AwayTDp); projYDc = AllowForInjuryRisk( unit.W1, projYDc); AddCatchingPlayerGameMetric( input, unit.W1.PlayerCode, projYDc, projTDc); } if (unit.W2 != null) { projYDc = ( int )(.25 * (isHome ? input.Prediction.HomeYDp : input.Prediction.AwayYDp)); projTDc = W2TdsFrom(isHome ? input.Prediction.HomeTDp : input.Prediction.AwayTDp); projYDc = AllowForInjuryRisk( unit.W2, projYDc); AddCatchingPlayerGameMetric( input, unit.W2.PlayerCode, projYDc, projTDc); } if (unit.W3 != null) { projYDc = ( int )(.15 * (isHome ? input.Prediction.HomeYDp : input.Prediction.AwayYDp)); projTDc = W3TdsFrom(isHome ? input.Prediction.HomeTDp : input.Prediction.AwayTDp); projYDc = AllowForInjuryRisk( unit.W3, projYDc); AddCatchingPlayerGameMetric( input, unit.W3.PlayerCode, projYDc, projTDc); } if (unit.TE != null) { projYDc = ( int )(.20 * (isHome ? input.Prediction.HomeYDp : input.Prediction.AwayYDp)); projTDc = TETdsFrom(isHome ? input.Prediction.HomeTDp : input.Prediction.AwayTDp); projYDc = AllowForInjuryRisk(unit.TE, projYDc); AddCatchingPlayerGameMetric(input, unit.TE.PlayerCode, projYDc, projTDc); } }