Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public autoAttack(enemy: Commander): void {
- interface IAtackerBestTargetTupple { attacker: Creature; bestTarget: Creature; }
- const attackerBestTargetTupple: IAtackerBestTargetTupple = [...this._army]
- .map((attackerCreature: Creature) =>
- ({ attacker: attackerCreature, bestTarget: attackerCreature.findBestTarget(enemy._army) }))
- .sort((tupleA: IAtackerBestTargetTupple, tupleB: IAtackerBestTargetTupple) =>
- (tupleA.bestTarget.healthPoints - tupleA.attacker.calculateActualDamage(tupleA.bestTarget))
- - (tupleB.bestTarget.healthPoints - tupleB.attacker.calculateActualDamage(tupleB.bestTarget)))
- .sort((tupleA: IAtackerBestTargetTupple, tupleB: IAtackerBestTargetTupple) =>
- tupleB.bestTarget.damage - tupleA.bestTarget.damage)
- .find((bestTuple: IAtackerBestTargetTupple) => bestTuple);
- this.applyAttack(attackerBestTargetTupple.attacker,
- attackerBestTargetTupple.bestTarget,
- enemy._army);
- if (attackerBestTargetTupple.bestTarget.healthPoints === 0) {
- enemy._army = enemy._army
- .filter(creature => creature !== attackerBestTargetTupple.bestTarget);
- }
- }
- public applyAttack(attacker: Creature, target: Creature, enemyArmy: Creature[]): void {
- attacker.attack(target);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement