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);
            }
        }
示例#2
0
        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);
        }
示例#6
0
 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);
            }
        }
示例#8
0
        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;
                }
            }
        }
示例#13
0
        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);
            }
        }