civ7-modding-tools
Version:
Mod generation tool for Civilization 7.
60 lines (45 loc) • 1.8 kB
text/typescript
import * as lodash from "lodash"
import { TClassProperties } from "../types";
import { DatabaseNode, GameEffectNode, ModifierNode, StringNode, TModifierNode } from "../nodes";
import { BaseBuilder } from "./BaseBuilder";
import { CivilizationLocalization, ModifierLocalization, TModifierLocalization } from "../localizations";
import { locale } from "../utils";
type TModifierBuilder = TClassProperties<ModifierBuilder>
export class ModifierBuilder extends BaseBuilder<TModifierBuilder> {
_gameEffects: GameEffectNode = new GameEffectNode();
_localizations: DatabaseNode = new DatabaseNode();
/** @description if detached only adding into game effects file while binding*/
isDetached = false;
modifier: Partial<TModifierNode> = {}
localizations: Partial<TModifierLocalization>[] = [];
constructor(payload: Partial<TModifierBuilder> = {}) {
super();
this.fill(payload);
}
migrate() {
const modifier = new ModifierNode(this.modifier);
if(this.localizations.length > 0) {
Object.keys(this.localizations[0]).forEach(key => {
modifier.strings.push({
context: lodash.capitalize(key),
value: locale(modifier.id, key)
})
});
}
this._localizations.fill({
englishText: this.localizations.map(item => {
return new ModifierLocalization({
prefix: modifier.id,
...item
});
}).flatMap(item => item.getNodes())
});
this._gameEffects.fill({
modifiers: [modifier]
});
return this;
}
build() {
return [];
}
}