Home Reference Source Repository

app/entities/creatures/strategies/MeleeAttackStrategy.js

import Strategy from './Strategy.js';
import Creature from '../Creature.js';
import Dungeon from '../../../dungeons/Dungeon.js';

import Moves from '../moves/Moves.js';

/**
 * @class ChaseStrategy
 * @description Causes monster to make melee attacks if able.
 * Does not cause movement
 */
export default class MeleeAttackStrategy extends Strategy {
    getNextMove(dungeon, creature) {
        if(!(dungeon instanceof Dungeon)) {
            throw new Error('First parameter must be a Dungeon');
        } else if(!(creature instanceof Creature)) {
            throw new Error('Second parameter must be a Creature');
        }
        var tile = dungeon.getTile(creature);
        var meleeWeapon = creature.getMeleeWeapon();
        if(!meleeWeapon || !meleeWeapon.isUseable()) {
            return null;
        }

        var enemyTiles = tile.getNeighbors8(dungeon).filter((tile)=>{
            var otherCreature = tile.getCreature();
            return otherCreature && otherCreature.isEnemy(creature);
        });

        if(enemyTiles.length > 0) {
            return new Moves.AttackMove(tile, enemyTiles[0]);
        } else {
            return null;
        }
    }
}