AI: added random blast shots on a grid
This commit is contained in:
parent
31c9aeeafb
commit
d0f475c0e4
1
TODO
1
TODO
|
@ -44,7 +44,6 @@
|
|||
* AI: do not always move first, they are defenders
|
||||
* AI: add combination of random small move and actual maneuver, as producer
|
||||
* AI: evaluate drone area effects
|
||||
* AI: produce random blast shots
|
||||
* AI: consider overheat/cooldown
|
||||
* AI: new duel page with producers/evaluators tweaking
|
||||
* Map: remove jump links that cross the radius of other systems
|
||||
|
|
|
@ -46,7 +46,7 @@ module TS.SpaceTac.Specs {
|
|||
]);
|
||||
});
|
||||
|
||||
it("produces blast shots", function () {
|
||||
it("produces interesting blast shots", function () {
|
||||
let battle = new Battle();
|
||||
let ship = battle.fleets[0].addShip();
|
||||
let weapon = TestTools.addWeapon(ship, 50, 1, 1000, 105);
|
||||
|
@ -54,19 +54,19 @@ module TS.SpaceTac.Specs {
|
|||
TestTools.setShipAP(ship, 10);
|
||||
battle.playing_ship = ship;
|
||||
|
||||
let result = imaterialize(TacticalAIHelpers.produceBlastShots(ship, battle));
|
||||
let result = imaterialize(TacticalAIHelpers.produceInterestingBlastShots(ship, battle));
|
||||
expect(result.length).toBe(0);
|
||||
|
||||
let enemy1 = battle.fleets[1].addShip();
|
||||
enemy1.setArenaPosition(500, 0);
|
||||
|
||||
result = imaterialize(TacticalAIHelpers.produceBlastShots(ship, battle));
|
||||
result = imaterialize(TacticalAIHelpers.produceInterestingBlastShots(ship, battle));
|
||||
expect(result.length).toBe(0);
|
||||
|
||||
let enemy2 = battle.fleets[1].addShip();
|
||||
enemy2.setArenaPosition(700, 0);
|
||||
|
||||
result = imaterialize(TacticalAIHelpers.produceBlastShots(ship, battle));
|
||||
result = imaterialize(TacticalAIHelpers.produceInterestingBlastShots(ship, battle));
|
||||
expect(result).toEqual([
|
||||
new Maneuver(ship, weapon.action, Target.newFromLocation(600, 0)),
|
||||
new Maneuver(ship, weapon.action, Target.newFromLocation(600, 0)),
|
||||
|
@ -75,7 +75,7 @@ module TS.SpaceTac.Specs {
|
|||
let enemy3 = battle.fleets[1].addShip();
|
||||
enemy3.setArenaPosition(700, 300);
|
||||
|
||||
result = imaterialize(TacticalAIHelpers.produceBlastShots(ship, battle));
|
||||
result = imaterialize(TacticalAIHelpers.produceInterestingBlastShots(ship, battle));
|
||||
expect(result).toEqual([
|
||||
new Maneuver(ship, weapon.action, Target.newFromLocation(600, 0)),
|
||||
new Maneuver(ship, weapon.action, Target.newFromLocation(600, 0)),
|
||||
|
|
|
@ -54,7 +54,7 @@ module TS.SpaceTac {
|
|||
/**
|
||||
* Produce blast weapon shots, with multiple targets.
|
||||
*/
|
||||
static produceBlastShots(ship: Ship, battle: Battle): TacticalProducer {
|
||||
static produceInterestingBlastShots(ship: Ship, battle: Battle): TacticalProducer {
|
||||
// TODO Work with groups of 3, 4 ...
|
||||
let weapons = ifilter(getPlayableActions(ship), action => action instanceof FireWeaponAction && action.blast > 0);
|
||||
let enemies = battle.ienemies(ship.getPlayer(), true);
|
||||
|
@ -65,6 +65,23 @@ module TS.SpaceTac {
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Produce random blast weapon shots, on a grid.
|
||||
*/
|
||||
static produceRandomBlastShots(ship: Ship, battle: Battle, cells = 20, iterations = 2, random = RandomGenerator.global): TacticalProducer {
|
||||
let weapons = ifilter(getPlayableActions(ship), action => action instanceof FireWeaponAction && action.blast > 0);
|
||||
let candidates = icombine(weapons, scanArena(battle, cells, random));
|
||||
let result = imap(candidates, ([weapon, location]) => new Maneuver(ship, weapon, location));
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Produce interesting then random blast shots
|
||||
*/
|
||||
static produceBlastShots(ship: Ship, battle: Battle): TacticalProducer {
|
||||
return ichain(TacticalAIHelpers.produceInterestingBlastShots(ship, battle), TacticalAIHelpers.produceRandomBlastShots(ship, battle));
|
||||
}
|
||||
|
||||
/**
|
||||
* Produce drone deployments.
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue