Home Reference Source Repository

app/entities/creatures/PlayableCharacter.js

import Creature from './Creature.js';

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

import Inventory from './Inventory.js';

export default class PlayableCharacter extends Creature {
    /**
      * @class PlayableCharacter
      * @description The creature controlled by the player
      */
    constructor() {
        super();
        this._moveQueue = [];
        this._inventory = new Inventory(this.getBackpackSize());
    }

    _updateVisionMap(dungeon) {
        var self = this;
        var visionMap = this._visionMap;
        if(!visionMap) {
            visionMap = this._visionMap = this._visionMap = new Array(dungeon.getWidth()).fill(0).map(()=>new Array(dungeon.getHeight()));
        }
        dungeon.forEachTile(function(tile, x, y) {
            visionMap[x][y] = visionMap[x][y] || self.canSee(dungeon, tile);
        });
    }

    setNextMove(move) {
        if(!(move instanceof Move)) {
            throw new Error(move + ' is not a Move');
        }
        this._moveQueue.push(move);
    }

    hasMoveQueued() {
        return this._moveQueue.length > 0;
    }

    getNextMove() {
        var read = this._moveQueue;
        if(read.length) {
            return read.shift();
        } else {
            throw new Error('PlayableCharacter doesn\'t have move queued');
        }
    }

    getFaction() {
        return 'Player';
    }

    canUseItems() {
        return true;
    }

    getBackpackSize() {
        return 3;
    }

    getBaseHP() {
        return 10;
    }

    getBaseMana() {
        return 10;
    }

    getSpeed() {
        return 450;
    }

    toString() {
        return 'PlayableCharacter';
    }
}