Ejemplo n.º 1
0
        public FightState(Fight fight)
        {
            this.Fight        = fight;
            this.FightControl = CalcFightControl();

            this.F1 = new FighterState(fight.Fighter0());
            this.F2 = new FighterState(fight.Fighter1());

            //We should add some randomness here?
            FightDistance = FightControl * F1.PreferredDistance(F2) + (1 - FightControl) * F2.PreferredDistance(F1);
            FightStats    = new List <FightStats>();

            this.TimeOfStoppage = -1;
            this.Scorecards     = new int[3, 2];
            this.Punches        = new List <List <Block.PunchResult> >();

            InitNextRound();
        }
Ejemplo n.º 2
0
        public double PreferredDistance(FighterState opponent)
        {
            double reachDifference    = Self.Reach - opponent.Self.Reach;
            double absReachDifference = Math.Abs(reachDifference) - 0.7; //small reach adv does not rly matter

            if (absReachDifference < 0)
            {
                absReachDifference = 0;
            }

            double preferredDistance = 1.0 / (1.0 + Math.Pow(Constants.CUBE_ROOT_TWO, absReachDifference));

            preferredDistance = reachDifference >= 0 ? 1 - preferredDistance : preferredDistance;

            //You don't know how to set up distance if your ring IQ is low
            preferredDistance = MathUtils.WeightedAverage(preferredDistance, Self.RingGen, 0.5, 100 - Self.RingGen);

            return(preferredDistance);
        }