mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2024-12-02 11:46:11 +00:00
43 lines
1.7 KiB
TypeScript
43 lines
1.7 KiB
TypeScript
|
import BattleScene from "../battle-scene";
|
||
|
import { PersistentModifier } from "../modifier/modifier";
|
||
|
import { GeneratedPersistentModifierType, ModifierTypeGenerator, getModifierTypeFuncById } from "../modifier/modifier-type";
|
||
|
|
||
|
export default class ModifierData {
|
||
|
private player: boolean;
|
||
|
private typeId: string;
|
||
|
private typePregenArgs: any[];
|
||
|
private args: any[];
|
||
|
private stackCount: integer;
|
||
|
|
||
|
public className: string;
|
||
|
|
||
|
constructor(source: PersistentModifier | any, player: boolean) {
|
||
|
const sourceModifier = source instanceof PersistentModifier ? source as PersistentModifier : null;
|
||
|
this.player = player;
|
||
|
this.typeId = sourceModifier ? sourceModifier.type.id : source.typeId;
|
||
|
if (sourceModifier) {
|
||
|
if ('getPregenArgs' in source.type)
|
||
|
this.typePregenArgs = (source.type as GeneratedPersistentModifierType).getPregenArgs();
|
||
|
} else if (source.typePregenArgs)
|
||
|
this.typePregenArgs = source.typePregenArgs;
|
||
|
this.args = sourceModifier ? sourceModifier.getArgs() : source.args;
|
||
|
this.stackCount = source.stackCount;
|
||
|
this.className = sourceModifier ? sourceModifier.constructor.name : source.className;
|
||
|
}
|
||
|
|
||
|
toModifier(scene: BattleScene, constructor: any): PersistentModifier {
|
||
|
const typeFunc = getModifierTypeFuncById(this.typeId);
|
||
|
if (!typeFunc)
|
||
|
return null;
|
||
|
|
||
|
let type = typeFunc();
|
||
|
type.id = this.typeId;
|
||
|
|
||
|
if (type instanceof ModifierTypeGenerator)
|
||
|
type = (type as ModifierTypeGenerator).generateType(this.player ? scene.getParty() : scene.getEnemyParty(), this.typePregenArgs);
|
||
|
|
||
|
const ret = Reflect.construct(constructor, ([ type ] as any[]).concat(this.args).concat(this.stackCount)) as PersistentModifier
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
}
|