app/abilities/Tunnel.js
import Ability from './Ability.js';
import Tiles from '../tiles/Tiles.js';
/** Lets user jump over enemies and obstacles to a nearby tile */
export default class Tunnel extends Ability {
/** @override */
getReasonIllegal(dungeon, creature, optionalTargetTile) {
var superReason = super.getReasonIllegal.apply(this, arguments);
if(superReason) {
return superReason;
} else if(!optionalTargetTile.isSolid()) {
return 'Must tunnel through a solid tile';
} else if(optionalTargetTile.getCreature()) {
return 'Can\'t tunnel an occupied tile';
} else {
return null;
}
}
/** Moves the creature over open spaces and creatures (but not through walls)
* to a visible tile within 3 spaces */
use(dungeon, creature, optionalTargetTile, isFree) {
super.use(dungeon, creature, optionalTargetTile, isFree);
const x = optionalTargetTile.getX();
const y = optionalTargetTile.getY();
dungeon.setTile(new Tiles.Tile(x, y), x, y);
dungeon.moveCreature(creature, x, y);
}
/** @override */
isTargetted() {
return true;
}
/** @override */
isTargetCreature() {
return false;
}
/** @override */
isMovementAbility() {
return true;
}
/** @override */
getRange() {
return 1;
}
/** @override */
canTargetSelf() {
return false;
}
/** @override */
getManaCost() {
return 1;
}
/** @override */
getDescription() {
return 'Tunnel through walls';
}
}