Home Reference Source Repository

app/entities/creatures/moves/TrashItemMove.js

import PlayableCharacter from '../PlayableCharacter.js';
import GameEvents from '../../../events/GameEvents.js';

import Move from './Move.js';

export default class TrashItemMove extends Move {
    constructor(actorTile, itemIndex) {
        super(actorTile);
        if(!Number.isInteger(+itemIndex)) {
            throw new Error('Item index must be an integer');
        }
        this._itemIndex = +itemIndex;
    }

    getItemIndex() {
        return this._itemIndex;
    }

    getCostMultiplier() {
        return 0.5;
    }

    getReasonIllegal(dungeon, creature) {
        var inventory = creature.getInventory();
        var item = inventory.getItem(this.getItemIndex());
        if(!item) {
            return `No item in slot ${this.getItemIndex()}`;
        } else {
            return null;
        }
    }

    execute(dungeon, creature) {
        var reason = this.getReasonIllegal(dungeon, creature);
        if(reason) {
            throw new Error(reason);
        }
        var item = creature.getInventory().removeItem(this.getItemIndex());
        dungeon.fireEvent(new GameEvents.TrashItemEvent(dungeon, creature, item));
        dungeon.fireEvent(new GameEvents.InventoryChangeEvent(dungeon, creature));
    }

    isSeenBy(dungeon, observer) {
        return observer.canSee(dungeon, dungeon.getTile(this.getActorX(), this.getActorY()));
    }
}