Home Reference Source Repository

app/abilities/Fireball.js

import Ability from './Ability.js';
import DamageTypes from '../entities/DamageTypes.js';

const AMOUNT = 5;

/**
  * Deals fire damage in a 3x3 area
  */
export default class Fireball extends Ability {
    /** Deals fire damage to creature in target tile (if any), and to each
      * creature on adjacent tiles. */
    use(dungeon, creature, optionalTargetTile, isFree) {
        super.use(dungeon, creature, optionalTargetTile, isFree);
        optionalTargetTile.getNeighbors8(dungeon).concat(optionalTargetTile)
                .map((tile)=>tile.getCreature()).filter(Boolean)
                .forEach(function(creature) {
                    creature.receiveDamage(dungeon, AMOUNT, DamageTypes.FIRE);
                });
    }

    /** @override */
    isTargetted() {
        return true;
    }

    /** @override */
    isTargetCreature() {
        return false;
    }

    /** @override */
    getRange() {
        return 5;
    }

    /** @override */
    getManaCost() {
        return 8;
    }

    /** @override */
    getDescription() {
        return `Does ${AMOUNT} fire damage to creatures in a 3x3 area.`;
    }
}