From 1ca152358c8ebdbc40e5d0bff294a32af0c8ec64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Fri, 20 Jul 2018 16:53:39 +0200 Subject: [PATCH] Fixed targetting hints --- src/common | 2 +- src/core/actions/BaseAction.spec.ts | 34 ++++++++++++++++++++++++++++- src/ui/battle/Targetting.ts | 17 +++++++++++---- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/common b/src/common index 9b05b53..fea005d 160000 --- a/src/common +++ b/src/common @@ -1 +1 @@ -Subproject commit 9b05b53c998b177a49a3dd43542bfa3cb1874af1 +Subproject commit fea005d01bbaad19c42bf5d446a7cfaa1ee977a6 diff --git a/src/core/actions/BaseAction.spec.ts b/src/core/actions/BaseAction.spec.ts index 09f45ba..683be61 100644 --- a/src/core/actions/BaseAction.spec.ts +++ b/src/core/actions/BaseAction.spec.ts @@ -90,7 +90,7 @@ module TK.SpaceTac.Specs { cooldown.cool(); check.equals(action.checkCannotBeApplied(ship), null); - }) + }); test.case("helps applying a targetting filter", check => { let fleet1 = new Fleet(); @@ -112,5 +112,37 @@ module TK.SpaceTac.Specs { check.equals(BaseAction.filterTargets(ship1a, ships, ActionTargettingFilter.ENEMIES), [ship2a, ship2b], "ENEMIES"); }); + + test.case("applies targetting mode when checking targets", check => { + let ship1 = new Ship(); + let ship2 = new Ship(); + let action = ship1.actions.addCustom(new BaseAction()); + + let mode = ActionTargettingMode.SELF; + check.patch(action, "getTargettingMode", () => mode); + check.equals(action.checkTarget(ship1, Target.newFromShip(ship1)), true); + check.equals(action.checkTarget(ship1, Target.newFromShip(ship2)), false); + check.equals(action.checkTarget(ship1, Target.newFromLocation(0, 0)), false); + + mode = ActionTargettingMode.SELF_CONFIRM; + check.equals(action.checkTarget(ship1, Target.newFromShip(ship1)), true); + check.equals(action.checkTarget(ship1, Target.newFromShip(ship2)), false); + check.equals(action.checkTarget(ship1, Target.newFromLocation(0, 0)), false); + + mode = ActionTargettingMode.SHIP; + check.equals(action.checkTarget(ship1, Target.newFromShip(ship1)), true); + check.equals(action.checkTarget(ship1, Target.newFromShip(ship2)), true); + check.equals(action.checkTarget(ship1, Target.newFromLocation(0, 0)), false); + + mode = ActionTargettingMode.SPACE; + check.equals(action.checkTarget(ship1, Target.newFromShip(ship1)), false); + check.equals(action.checkTarget(ship1, Target.newFromShip(ship2)), false); + check.equals(action.checkTarget(ship1, Target.newFromLocation(0, 0)), true); + + mode = ActionTargettingMode.SURROUNDINGS; + check.equals(action.checkTarget(ship1, Target.newFromShip(ship1)), true); + check.equals(action.checkTarget(ship1, Target.newFromShip(ship2)), false); + check.equals(action.checkTarget(ship1, Target.newFromLocation(0, 0)), false); + }); }); } diff --git a/src/ui/battle/Targetting.ts b/src/ui/battle/Targetting.ts index 5a435c0..0223b44 100644 --- a/src/ui/battle/Targetting.ts +++ b/src/ui/battle/Targetting.ts @@ -264,10 +264,19 @@ module TK.SpaceTac.UI { let grid = this.ship.grid; let action = this.action; let simulator = new MoveFireSimulator(this.ship, grid); - this.grid_work = imap(grid.iterate(this.ship.location), (loc): [IArenaLocation, MoveFireResult] => { - let target = Target.newFromLocation(loc.x, loc.y); - return [loc, simulator.simulateAction(action, target)]; - })[Symbol.iterator](); + let mode = action.getTargettingMode(this.ship); + if (mode == ActionTargettingMode.SPACE || mode == ActionTargettingMode.SURROUNDINGS) { + this.grid_work = imap(grid.iterate(this.ship.location), (loc): [IArenaLocation, MoveFireResult] => { + let target = (mode == ActionTargettingMode.SURROUNDINGS) ? new Target(loc.x, loc.y, this.ship) : Target.newFromLocation(loc.x, loc.y); + return [loc, simulator.simulateAction(action, target)]; + })[Symbol.iterator](); + } else { + let battle = nn(this.ship.getBattle()); + this.grid_work = imap(battle.iships(true), (iship): [IArenaLocation, MoveFireResult] => { + let target = Target.newFromShip(iship); + return [iship.location, simulator.simulateAction(action, target)]; + })[Symbol.iterator](); + } } else { this.grid_work = IATEND; }