Home Reference Source Repository

app/entities/creatures/enemies/Ent.js

import Creature from '../Creature.js';
import Strategies from '../strategies/Strategies.js';

import Armor from '../../armor/Armor.js';
import Weapon from '../../weapons/Weapon.js';
import DamageTypes from '../../DamageTypes.js';

class Bark extends Armor {
    getReduction(type) {
        if(type === DamageTypes.MELEE_PHYSICAL) {
            return 2;
        } else if(type === DamageTypes.RANGED_PHYSICAL) {
            return 3;
        } else if(type === DamageTypes.FIRE) {
            return -3; // Weakness
        } else {
            return 0;
        }
    }
}

class EntAttack extends Weapon {
    getRange() {
        return 1;
    }

    getDamage() {
        return 8;
    }

    getDamageType() {
        return DamageTypes.MELEE_PHYSICAL;
    }
}

export default class Ent extends Creature {
    /**
     * @class Ent
     * @description Slow melee enemy. Chases the player
     */
    constructor() {
        super();
        this.setStrategy(new Strategies.CompositeStrategy(
            new Strategies.ChaseStrategy(),
            new Strategies.RandomWalkStrategy(),
            new Strategies.IdleStrategy()
        ));
    }

    getMeleeWeapon() {
        return new EntAttack();
    }

    getRangedWeapon() {
        return null;
    }

    getArmor() {
        return new Bark();
    }

    getSpeed() {
        return 800;
    }

    getBaseHP() {
        return 8;
    }
}