public void AttackActionTestProbability() { var map = new SmallMap().BuildMap(); var attackingUnitLoses = 0; var defendingUnitLoses = 0; for (var i = 0; i < 10000; i++) { var attackingUnit = new EqualPowerWarrior(Position.ZERO); var defendingUnit = new EqualPowerWarrior(new Position(1, 1)); var action = new AttackAction(map, attackingUnit, defendingUnit); action.Do(); if (action.Loser == attackingUnit) { attackingUnitLoses++; } else { defendingUnitLoses++; } } var attackerWin = attackingUnitLoses / (double)(attackingUnitLoses + defendingUnitLoses); var defenderWin = defendingUnitLoses / (double)(attackingUnitLoses + defendingUnitLoses); var epsilon = 0.01; Assert.IsTrue(attackerWin <0.5 + epsilon && attackerWin> 0.5 - epsilon); Assert.IsTrue(defenderWin <0.5 + epsilon && defenderWin> 0.5 - epsilon); }
private void Start() { Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(0)) .ThrottleFirst(TimeSpan.FromSeconds(attackCooldown.Value)) .Subscribe(_ => { var pos = Input.mousePosition; pos.z = 10; pos = Camera.main.ScreenToWorldPoint(pos); _attackAction.Do(gameObject, pos - transform.position); punchEvent.Raise(); }); }
public void DoTest() { var map = new SmallMap().BuildMap(); var attacker = new CerberusWarrior(Position.ZERO); var defender = new CentaurWarrior(new Position(1, 1)); AttackAction action = new AttackAction(map, attacker, defender); action.Do(); var movePointsLost = 2; Assert.AreEqual(action.Loser.HealthPoints, action.Loser.InitialHealthPoints - action.HealthPointsLost); Assert.AreEqual(action.MovePointsLost, movePointsLost); Assert.AreEqual(attacker.MovePoints, Unit.MAX_MOVE_POINTS - movePointsLost); }
void Start() { attackEvent = new VoidEvent(); _animationHandler.CreateAnimationUnit("Punch", AnimatorControllerParameterType.Trigger, atomEvent: attackEvent); Transform player = AtomTags.FindByTag(playerTag.Value).transform; Observable.EveryUpdate().Buffer(TimeSpan.FromSeconds(eachXSeconds)) .Where(_ => attackAtThisDistance.Value >= Vector2.Distance(player.position, transform.position)) .Subscribe(_ => { _attackAction.Do(gameObject, player.position - transform.position); attackEvent.Raise(); }); }
public void onAttackBtnClick() { attackAction.Do(this, enemy); }