Home Reference Source Repository

app/entities/creatures/enemies/Crier.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';

import KnockbackEffect from '../../../effects/KnockbackEffect.js';

class TrumpetPlating extends Armor {
    getReduction(type) {
        if(type === DamageTypes.MELEE_PHYSICAL) {
            return 2;
        } else if(type === DamageTypes.RANGED_PHYSICAL) {
            return 2;
        } else if(type === DamageTypes.FIRE) {
            return 2;
        } else {
            return 0;
        }
    }
}

class TrumpetBlast extends Weapon {
    getDamage() {
        return 0;
    }

    getRange() {
        return 1;
    }

    getDamageType() {
        return DamageTypes.MELEE_PHYSICAL;
    }

    onAttack(dungeon, creature, target) {
        new KnockbackEffect(1).apply(dungeon, creature, target);
    }

    getFriendlyDescription() {
        return `Does ${this.getDamage()} damage to adjacent enemy and pushes them back`;
    }
}

export default class Crier extends Creature {
    constructor() {
        super();
        this.addItem(new TrumpetBlast());
        this.addItem(new TrumpetPlating());
        this.setStrategy(new Strategies.CompositeStrategy(
            new Strategies.MeleeAttackStrategy(),
            new Strategies.HoldStrategy(),
            new Strategies.RandomWalkStrategy(),
            new Strategies.IdleStrategy()
        ));
    }

    getSpeed() {
        return 500;
    }

    getBaseHP() {
        return 4;
    }
}