borderlands2
Version:
Borderlands 2 weapon damage and DPS calculation library
39 lines (30 loc) • 1.05 kB
text/typescript
import { StatType } from "../value_object/stat_type";
import { Stat } from "../interface/stat";
import { Weapon } from "../../weapon/interface/weapon";
import { Context } from "../../context";
import { EffectType } from "../../effect";
export abstract class Skill {
public level: number
public abstract name: string
protected abstract stats: Stat[]
protected effectType?: EffectType
constructor(level: number) {
this.level = level
}
public getStat(statType: StatType, weapon: Weapon, context: Context): number {
let stat = this.stats.find((stat: Stat) => stat.type === statType)
if(!stat) return 0
return stat.value * this.level * this.getEffectiveness(context)
}
protected getEffectiveness(context: Context): number {
if(!this.effectType) return 1
let effect = context.effects?.find(effect => effect.getEffectType() === this.effectType)
if(effect) {
return effect.multiplier.getValue()
}
return 0
}
public getEffectType(): EffectType|void {
return this.effectType
}
}