118 lines
3.5 KiB
JavaScript
118 lines
3.5 KiB
JavaScript
import { CharacterGenerator } from "./character-generator.js";
|
|
|
|
/**
|
|
* L5R NPC Generator form
|
|
*
|
|
* @extends {FormApplication}
|
|
*/
|
|
export class CharacterGeneratorDialog extends FormApplication {
|
|
/**
|
|
* Current actor data
|
|
*/
|
|
actor = null;
|
|
|
|
/**
|
|
* Payload Object
|
|
*/
|
|
object = {
|
|
avg_rings: 3,
|
|
clan: "random",
|
|
gender: "random",
|
|
generateAttributes: true,
|
|
generateDemeanor: true,
|
|
generateName: true,
|
|
generateNarrative: true,
|
|
generatePeculiarities: true,
|
|
generateItems: true,
|
|
generateTechniques: true,
|
|
generateSocial: true,
|
|
};
|
|
|
|
/**
|
|
* Assign the default options
|
|
* @override
|
|
*/
|
|
static get defaultOptions() {
|
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
|
id: "l5r5e-character-generator-dialog",
|
|
classes: ["l5r5e", "character-generator-dialog"],
|
|
template: CONFIG.l5r5e.paths.templates + "actors/character-generator-dialog.html",
|
|
title: game.i18n.localize("l5r5e.char_generator.title"),
|
|
// width: 600,
|
|
// height: 360,
|
|
resizable: false,
|
|
closeOnSubmit: false,
|
|
submitOnClose: false,
|
|
submitOnChange: false,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Define a unique and dynamic element ID for the rendered ActorSheet application
|
|
*/
|
|
get id() {
|
|
return `l5r5e-npc-generator-dialog-${this.actor.id}`;
|
|
}
|
|
|
|
/**
|
|
* Create dialog
|
|
*/
|
|
constructor(actor = null, options = {}) {
|
|
super({}, options);
|
|
this.actor = actor;
|
|
}
|
|
|
|
/**
|
|
* Construct and return the data object used to render the HTML template for this form application.
|
|
* @param options
|
|
* @return {Object}
|
|
*/
|
|
async getData(options = null) {
|
|
const clans = Object.keys(CharacterGenerator.clansAndFamilies).map((e) => ({
|
|
id: e,
|
|
label: game.i18n.localize("l5r5e.clans." + e),
|
|
}));
|
|
return {
|
|
...super.getData(options),
|
|
isNpc: this.actor.type === "npc",
|
|
clanList: [{ id: "random", label: game.i18n.localize("l5r5e.random") }, ...clans],
|
|
genderList: [
|
|
{ id: "random", label: game.i18n.localize("l5r5e.random") },
|
|
{ id: "male", label: game.i18n.localize("l5r5e.gender.male") },
|
|
{ id: "female", label: game.i18n.localize("l5r5e.gender.female") },
|
|
],
|
|
data: this.object,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* This method is called upon form submission after form data is validated
|
|
* @param event The initial triggering submission event
|
|
* @param formData The object of validated form data with which to update the object
|
|
* @returns A Promise which resolves once the update operation has completed
|
|
* @override
|
|
*/
|
|
async _updateObject(event, formData) {
|
|
// Generate datas
|
|
const generator = new CharacterGenerator({
|
|
avgRingsValue: formData.avg_rings,
|
|
clanName: formData.clan,
|
|
gender: formData.gender,
|
|
});
|
|
|
|
// Update current Object with new data to keep selection
|
|
// Get selected value from generator for random values
|
|
this.object = {
|
|
...formData,
|
|
clan: generator.data.clan,
|
|
gender: generator.data.gender,
|
|
};
|
|
|
|
// Update actor with selection
|
|
const updatedDatas = await generator.toActor(this.actor, formData);
|
|
await this.actor.update(updatedDatas);
|
|
|
|
this.render(false);
|
|
}
|
|
}
|