borderlands2
Version:
Borderlands 2 weapon damage and DPS calculation library
58 lines (53 loc) • 1.77 kB
text/typescript
import { v4 as uuidv4 } from 'uuid'
import { Build, Stat, Skill } from "../../build";
import { GameModeEnum } from "../../enemy";
import { Effect, EffectType } from "../../effect";
import { ClassMod } from "../../gear";
import { Relic } from "../../gear/object/relic";
import { Shield } from "../../gear/object/shield";
import { Memoize } from "typescript-memoize";
export class Context {
public id: string
public name?: string
public build: Build
public classMod?: ClassMod
public relic?: Relic
public shield?: Shield
public badassRanking: Stat[]
public effects: Effect[]
public gameMode: GameModeEnum // could be an effect
constructor(
build: Build,
name?: string,
classMod?: ClassMod,
relic?: Relic,
shield?: Shield,
badassRanking: Stat[] = [],
effects : Effect[] = [],
gameMode: GameModeEnum = GameModeEnum.NormalMode
) {
this.id = uuidv4()
this.build = build
this.name = name
this.classMod = classMod
this.relic = relic
this.shield = shield
this.badassRanking = badassRanking
this.effects = effects
this.gameMode = gameMode
}
public getEffect = (effectType: EffectType): Effect|void => {
return this.effects.find(effect => effect.getEffectType() === effectType)
}
public getSkills(): Skill[] {
if(!this.classMod) return this.build.skills
let classModSkills = this.classMod.getSkills()
// merge class mod skills into skills
return this.build.skills.map((skill: Skill) => {
let classModSkill = classModSkills.find((classModSkill: Skill) => classModSkill.name === skill.name )
let classModLevel = classModSkill?.level ?? 0
return Object.getPrototypeOf(skill).constructor(skill.level + classModLevel)
})
}
}