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(); }
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); }