1
0
Fork 0

Fixed Xander's "Disengage" being used instead of main engine

This commit is contained in:
Michaël Lemaire 2018-03-01 19:46:17 +01:00
parent 8d983258f8
commit ea8771fc75
4 changed files with 19 additions and 20 deletions

View file

@ -10,17 +10,20 @@ module TK.SpaceTac.Specs {
return [ship, simulator, action]; return [ship, simulator, action];
} }
test.case("finds the best engine to make a move", check => { test.case("finds a suitable engine to make an approach", check => {
let ship = new Ship(); let ship = new Ship();
let simulator = new MoveFireSimulator(ship); let simulator = new MoveFireSimulator(ship);
check.equals(simulator.findBestEngine(), null); check.equals(simulator.findEngine(), null);
let engine1 = TestTools.addEngine(ship, 100); let engine1 = TestTools.addEngine(ship, 100);
check.same(simulator.findBestEngine(), engine1); check.same(simulator.findEngine(), engine1);
let engine2 = TestTools.addEngine(ship, 120); let engine2 = TestTools.addEngine(ship, 120);
let engine3 = TestTools.addEngine(ship, 150); check.same(simulator.findEngine(), engine1);
let engine4 = TestTools.addEngine(ship, 70); engine1.configureCooldown(1, 1);
let best = simulator.findBestEngine(); engine1.getCooldown().use();
check.same(best, engine3); check.same(simulator.findEngine(), engine2);
engine2.configureCooldown(1, 1);
engine2.getCooldown().use();
check.equals(simulator.findEngine(), null);
}); });
test.case("fires directly when in range", check => { test.case("fires directly when in range", check => {
@ -110,7 +113,7 @@ module TK.SpaceTac.Specs {
let battle = new Battle(); let battle = new Battle();
battle.fleets[0].addShip(ship); battle.fleets[0].addShip(ship);
let ship1 = battle.fleets[0].addShip(); let ship1 = battle.fleets[0].addShip();
let moveaction = nn(simulator.findBestEngine()); let moveaction = nn(simulator.findEngine());
(<any>moveaction).safety_distance = 30; (<any>moveaction).safety_distance = 30;
battle.ship_separation = 30; battle.ship_separation = 30;

View file

@ -53,15 +53,12 @@ module TK.SpaceTac {
} }
/** /**
* Find the best available move action * Find an engine action, to make an approach
*
* This will return the first available engine, in the definition order
*/ */
findBestEngine(): MoveAction | null { findEngine(): MoveAction | null {
let actions = <MoveAction[]>this.ship.actions.listAll().filter(action => action instanceof MoveAction); return first(cfilter(this.ship.actions.listAll(), MoveAction), action => action.getCooldown().canUse());
if (actions.length == 0) {
return null;
} else {
return maxBy(actions, action => action.getDistanceByActionPoint(this.ship));
}
} }
/** /**
@ -140,7 +137,7 @@ module TK.SpaceTac {
move_target = corrected_target; move_target = corrected_target;
} }
} else { } else {
let engine = this.findBestEngine(); let engine = this.findEngine();
if (engine) { if (engine) {
let approach_radius = action.getRangeRadius(this.ship); let approach_radius = action.getRangeRadius(this.ship);
let approach = this.getApproach(engine, target, approach_radius, move_margin); let approach = this.getApproach(engine, target, approach_radius, move_margin);
@ -161,7 +158,7 @@ module TK.SpaceTac {
// Check move AP // Check move AP
if (result.need_move && move_target) { if (result.need_move && move_target) {
let engine = this.findBestEngine(); let engine = this.findEngine();
if (engine) { if (engine) {
result.total_move_ap = engine.getActionPointsUsage(this.ship, move_target); result.total_move_ap = engine.getActionPointsUsage(this.ship, move_target);
result.can_move = ap > 0; result.can_move = ap > 0;

View file

@ -29,7 +29,6 @@ module TK.SpaceTac {
}, "fractalhull"); }, "fractalhull");
hull.configureCooldown(1, 4); hull.configureCooldown(1, 4);
// TODO Is currently always used by move-fire simulator
let disengage = new MoveAction("Disengage", { let disengage = new MoveAction("Disengage", {
distance_per_power: 1000, distance_per_power: 1000,
safety_distance: 200, safety_distance: 200,

View file

@ -257,7 +257,7 @@ module TK.SpaceTac.UI {
move_action = <MoveAction>last_move.action; move_action = <MoveAction>last_move.action;
} }
} else { } else {
let engine = new MoveFireSimulator(this.ship).findBestEngine(); let engine = new MoveFireSimulator(this.ship).findEngine();
if (engine) { if (engine) {
move_action = engine; move_action = engine;
} }