working on 20Q
This commit is contained in:
@@ -11,7 +11,10 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
*/
|
||||
actor = null;
|
||||
|
||||
errors = [];
|
||||
/**
|
||||
* Errors object
|
||||
*/
|
||||
errors = {};
|
||||
|
||||
/**
|
||||
* Assign the default options
|
||||
@@ -26,6 +29,9 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
width: 600,
|
||||
height: 600,
|
||||
resizable: true,
|
||||
closeOnSubmit: false,
|
||||
submitOnClose: true,
|
||||
submitOnChange: true,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -36,6 +42,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
super(options);
|
||||
this.actor = actor;
|
||||
this.object = new TwentyQuestions(actor);
|
||||
this.errors = this.object.validateForm();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,8 +85,11 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
...super.getData(options),
|
||||
ringsList: game.l5r5e.HelpersL5r5e.getRingsList(),
|
||||
skillsList: game.l5r5e.HelpersL5r5e.getSkillsList(true),
|
||||
noHonorSkillsList: ["commerce", "skulduggery", "medicine", "seafaring", "survival", "labor"],
|
||||
techniquesList: CONFIG.l5r5e.techniques,
|
||||
data: this.object.data,
|
||||
errors: this.errors,
|
||||
hasErrors: Object.keys(this.errors).length > 0,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -113,22 +123,10 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check rings total
|
||||
html.find(".ring-select").on("change", async (event) => {
|
||||
const sum = this._summarySelects(html, ".ring-select");
|
||||
// sum = Map(4) {"void" => 2, "water" => 1, "fire" => 1, "earth" => 1}
|
||||
console.log(sum);
|
||||
});
|
||||
|
||||
// Check skills total
|
||||
html.find(".skill-select").on("change", async (event) => {
|
||||
const sum = this._summarySelects(html, ".skill-select");
|
||||
console.log(sum);
|
||||
});
|
||||
|
||||
// Submit button
|
||||
html.find("#generate").on("click", async (event) => {
|
||||
this.submit();
|
||||
this.object.toActor(this.actor);
|
||||
await this.close({ submit: true, force: true });
|
||||
});
|
||||
}
|
||||
|
||||
@@ -164,11 +162,6 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
return false;
|
||||
}
|
||||
|
||||
// _canDragDrop(event) {
|
||||
// console.log("*** _canDragDrop event", event);
|
||||
// return false;
|
||||
// }
|
||||
|
||||
/**
|
||||
* This method is called upon form submission after form data is validated
|
||||
* @param event The initial triggering submission event
|
||||
@@ -177,30 +170,22 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
* @override
|
||||
*/
|
||||
async _updateObject(event, formData) {
|
||||
// Update 20Q object data
|
||||
this.object.updateFromForm(formData);
|
||||
this.object.toActor(this.actor);
|
||||
return this.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a map of skill/ring with count
|
||||
* @private
|
||||
*/
|
||||
_summarySelects(html, selector) {
|
||||
return html
|
||||
.find(selector)
|
||||
.get()
|
||||
.reduce((acc, curr) => {
|
||||
curr = curr.value;
|
||||
if (curr === "none") {
|
||||
return acc;
|
||||
}
|
||||
let val = acc.get(curr);
|
||||
if (!val) {
|
||||
val = 0;
|
||||
}
|
||||
acc.set(curr, val + 1);
|
||||
return acc;
|
||||
}, new Map());
|
||||
// Get errors if any
|
||||
this.errors = this.object.validateForm();
|
||||
|
||||
// Only on close/submit
|
||||
if (event.type === "submit") {
|
||||
// Store this form datas in actor
|
||||
this.actor.data.data.twenty_questions = this.object.data;
|
||||
this.actor.update({
|
||||
data: {
|
||||
twenty_questions: this.object.data,
|
||||
},
|
||||
});
|
||||
}
|
||||
this.render(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,10 +198,6 @@ export class TwentyQuestions {
|
||||
const actorDatas = actor.data.data;
|
||||
const formData = this.data;
|
||||
|
||||
// Store this form datas
|
||||
// TODO maybe elsewhere than in the actor ?
|
||||
actorDatas.twenty_questions = this.data;
|
||||
|
||||
// Update the actor real datas
|
||||
actorDatas.zeni = formData.step2.wealth;
|
||||
actorDatas.identity = {
|
||||
@@ -236,7 +232,9 @@ export class TwentyQuestions {
|
||||
CONFIG.l5r5e.stances.forEach((ring) => (actorDatas.rings[ring] = 1));
|
||||
TwentyQuestions.ringList.forEach((formName) => {
|
||||
const ring = getProperty(this.data, formName);
|
||||
actorDatas.rings[ring] = actorDatas.rings[ring] + 1;
|
||||
if (ring !== "none") {
|
||||
actorDatas.rings[ring] = actorDatas.rings[ring] + 1;
|
||||
}
|
||||
});
|
||||
|
||||
// Skills - Reset to 0, and apply modifiers
|
||||
@@ -246,7 +244,9 @@ export class TwentyQuestions {
|
||||
TwentyQuestions.skillList.forEach((formName) => {
|
||||
const skillId = getProperty(this.data, formName);
|
||||
const skillCat = CONFIG.l5r5e.skills.get(skillId);
|
||||
actorDatas.skills[skillCat][skillId] = actorDatas.skills[skillCat][skillId] + 1;
|
||||
if (skillId !== "none") {
|
||||
actorDatas.skills[skillCat][skillId] = actorDatas.skills[skillCat][skillId] + 1;
|
||||
}
|
||||
});
|
||||
|
||||
// TODO Items references
|
||||
@@ -261,29 +261,35 @@ export class TwentyQuestions {
|
||||
console.log(actor);
|
||||
}
|
||||
|
||||
// checkRings() {
|
||||
// const rings = {};
|
||||
// const exceed = {};
|
||||
// CONFIG.l5r5e.stances.forEach(ring => rings[ring] = 1);
|
||||
// TwentyQuestions.ringList.forEach((formName) => {
|
||||
// const ring = getProperty(this.data, formName);
|
||||
// rings[ring] = rings[ring] + 1;
|
||||
//
|
||||
// console.log(rings);
|
||||
//
|
||||
// if (rings[ring] > 3) {
|
||||
// exceed[ring] = ring;
|
||||
// }
|
||||
// });
|
||||
// return exceed;
|
||||
// }
|
||||
//
|
||||
// checkSkills() {
|
||||
// const skills = {};
|
||||
// TwentyQuestions.skillList.forEach((formName) => {
|
||||
// const skillId = getProperty(this.data, formName);
|
||||
// const skillCat = CONFIG.l5r5e.skills.get(skillId);
|
||||
// actorDatas.skills[skillCat][skillId] = actorDatas.skills[skillCat][skillId] + 1;
|
||||
// });
|
||||
// }
|
||||
/**
|
||||
* Return a array of errors, empty array if no errors founds
|
||||
*/
|
||||
validateForm() {
|
||||
// Rings & Skills
|
||||
const rings = this._checkRingsOrSkills("ringList", 2); // ring start at 1
|
||||
const skills = this._checkRingsOrSkills("skillList", 3); // skill start at 0
|
||||
|
||||
// TODO Techniques / peculiarities
|
||||
|
||||
return { ...rings, ...skills };
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of exceeded ring/skill
|
||||
*/
|
||||
_checkRingsOrSkills(listName, max) {
|
||||
const store = {};
|
||||
const exceed = {};
|
||||
TwentyQuestions[listName].forEach((formName) => {
|
||||
const id = getProperty(this.data, formName);
|
||||
if (!store[id]) {
|
||||
store[id] = 0;
|
||||
}
|
||||
store[id] = store[id] + 1;
|
||||
if (store[id] > max) {
|
||||
exceed[id] = store[id];
|
||||
}
|
||||
});
|
||||
return exceed;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user