///
///
interface WeaponOptions extends ClothingOptions {
leftHand : boolean;
rightHand : boolean;
attribute? : Attribute;
baseDamage? : number;
attackCost? : number;
}
class Weapon extends Clothing {
private baseDamage : number = 0;
private attribute = undefined;
public attackCost = 1;
constructor (t : WeaponOptions) {
super(t);
if (t.leftHand) {
this.slots.push(Humanoid.SLOT_LEFTHAND);
}
if (t.rightHand) {
this.slots.push(Humanoid.SLOT_RIGHTHAND);
}
this.baseDamage = t.baseDamage == undefined ? 0 : t.baseDamage;
this.attackCost = t.attackCost == undefined ? 1 : t.attackCost;
this.attribute = t.attribute;
}
public getDamage () {
let damage = this.baseDamage;
let wielder = this.getWearOne();
let attrValue : number;
if (this.attribute != undefined) {
attrValue = wielder.getStat(this.attribute);
} else {
attrValue = 0;
}
// TODO: Reconsider RNG.
let result = attrValue + (1 + Math.floor(Math.random() * damage));
if (this.slots.length == 2) {
return Math.floor(result * 5 / 3); // Twohanded modifier
} else {
return Math.floor(result * 2 / 3); // One-handed modifier
}
}
}