Home Reference Source Repository

app/effects/KnockbackEffect.js

export default class KnockbackEffect {
    constructor(distance) {
        if(+distance !== 1) {
            throw new Error('Unsupported value: ' + distance);
        }
        this._distance = +distance;
    }

    apply(dungeon, source, target) {
        var sourceTile = dungeon.getTile(source);
        var targetTile = dungeon.getTile(target);
        var dx = Math.sign(targetTile.getX() - sourceTile.getX());
        var dy = Math.sign(targetTile.getY() - sourceTile.getY());
        var x = targetTile.getX() + dx;
        var y = targetTile.getY() + dy;
        var tile = dungeon.getTile(x, y);
        if(!tile.isSolid() && !tile.getCreature()) {
            dungeon.moveCreature(target, x, y);
            return true;
        } else {
            return false;
        }
    }
}