ENH: Creation summary
							parent
							
								
									2f3c91d72c
								
							
						
					
					
						commit
						642c368f38
					
				|  | @ -252,7 +252,6 @@ | |||
|   "OSE.messages.InflictsDamage": "Inflicts damage!", | ||||
|   "OSE.messages.applyDamage": "Apply Damage", | ||||
|   "OSE.messages.applyHealing": "Apply Healing", | ||||
|   "OSE.messages.creationFinished": "Character {name} creation finished", | ||||
| 
 | ||||
|   "OSE.colors.green": "Green", | ||||
|   "OSE.colors.red": "Red", | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ export class OseCharacterCreator extends FormApplication { | |||
|   static get defaultOptions() { | ||||
|     const options = super.defaultOptions; | ||||
|     options.classes = ["ose", "dialog", "creator"], | ||||
|     options.id = 'character-creator'; | ||||
|       options.id = 'character-creator'; | ||||
|     options.template = | ||||
|       'systems/ose/templates/actors/dialogs/character-creation.html'; | ||||
|     options.width = 235; | ||||
|  | @ -41,6 +41,11 @@ export class OseCharacterCreator extends FormApplication { | |||
|       con: 0, | ||||
|       gold: 0 | ||||
|     } | ||||
|     data.stats = { | ||||
|       sum: 0, | ||||
|       avg: 0, | ||||
|       std: 0 | ||||
|     } | ||||
|     return data; | ||||
|   } | ||||
| 
 | ||||
|  | @ -56,20 +61,27 @@ export class OseCharacterCreator extends FormApplication { | |||
|     }) | ||||
| 
 | ||||
|     let n = values.length; | ||||
|     let sum = values.reduce((a,b) => a+b); | ||||
|     let sum = values.reduce((a, b) => a + b); | ||||
|     let mean = parseFloat(sum) / n; | ||||
|     let std = Math.sqrt(values.map(x => Math.pow(x-mean,2)).reduce((a,b) => a+b)/n); | ||||
|     let std = Math.sqrt(values.map(x => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n); | ||||
| 
 | ||||
|     let stats = list.siblings('.roll-stats'); | ||||
|     stats.find('.sum').text(sum); | ||||
|     stats.find('.avg').text(Math.round(10 * sum / n) / 10); | ||||
|     stats.find('.std').text(Math.round(100 * std) / 100); | ||||
| 
 | ||||
|     if (n >= 6) { | ||||
|       $(ev.currentTarget).closest('form').find('button[type="submit"]').removeAttr('disabled'); | ||||
|     } | ||||
| 
 | ||||
|     this.object.data.stats = { | ||||
|       sum: sum, | ||||
|       avg: Math.round(10 * sum / n) / 10, | ||||
|       std: Math.round(100 * std) / 100 | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   rollScore(score, options={}) { | ||||
|   rollScore(score, options = {}) { | ||||
|     // Increase counter
 | ||||
|     this.object.data.counters[score]++; | ||||
| 
 | ||||
|  | @ -90,16 +102,32 @@ export class OseCharacterCreator extends FormApplication { | |||
|       data: data, | ||||
|       skipDialog: true, | ||||
|       speaker: ChatMessage.getSpeaker({ actor: this }), | ||||
|       flavor: game.i18n.format('OSE.dialog.generateScore', {score: label, count: this.object.data.counters[score]}), | ||||
|       title: game.i18n.format('OSE.dialog.generateScore', {score: label, count: this.object.data.counters[score]}), | ||||
|       flavor: game.i18n.format('OSE.dialog.generateScore', { score: label, count: this.object.data.counters[score] }), | ||||
|       title: game.i18n.format('OSE.dialog.generateScore', { score: label, count: this.object.data.counters[score] }), | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   async close() { | ||||
|     super.close(); | ||||
|     // Gather scores
 | ||||
|     let scores = {}; | ||||
|     $(this.form.children).find(".score-roll").each((_, d) => { | ||||
|       let gr = $(d).closest('.form-group'); | ||||
|       let val = gr.find(".score-value").val(); | ||||
|       scores[gr.data("score")] = val; | ||||
|     }) | ||||
|     const gold = $(this.form.children).find('.gold-value').val(); | ||||
|     const speaker = ChatMessage.getSpeaker({ actor: this }); | ||||
|     const templateData = { | ||||
|       config: CONFIG.OSE, | ||||
|       scores: scores, | ||||
|       title: game.i18n.localize("OSE.dialog.generator"), | ||||
|       stats: this.object.data.stats, | ||||
|       gold: gold | ||||
|     } | ||||
|     const content = await renderTemplate("/systems/ose/templates/chat/roll-creation.html", templateData) | ||||
|     ChatMessage.create({ | ||||
|       content: game.i18n.format("OSE.messages.creationFinished", {name: this.object.name}), | ||||
|       content: content, | ||||
|       speaker, | ||||
|     }); | ||||
|   } | ||||
|  | @ -110,14 +138,14 @@ export class OseCharacterCreator extends FormApplication { | |||
|     html.find('a.score-roll').click((ev) => { | ||||
|       let el = ev.currentTarget.parentElement.parentElement; | ||||
|       let score = el.dataset.score; | ||||
|       this.rollScore(score, {event: ev}).then(r => { | ||||
|       this.rollScore(score, { event: ev }).then(r => { | ||||
|         $(el).find('input').val(r.total).trigger('change'); | ||||
|       }); | ||||
|     }); | ||||
| 
 | ||||
|     html.find('a.gold-roll').click((ev) => { | ||||
|       let el = ev.currentTarget.parentElement.parentElement.parentElement; | ||||
|       this.rollScore("gold", {event: ev}).then(r => { | ||||
|       this.rollScore("gold", { event: ev }).then(r => { | ||||
|         $(el).find('.gold-value').val(r.total * 10); | ||||
|       }); | ||||
|     }); | ||||
|  | @ -127,8 +155,8 @@ export class OseCharacterCreator extends FormApplication { | |||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   async _onSubmit(event, {updateData=null, preventClose=false, preventRender=false}={}) { | ||||
|     super._onSubmit(event, {updateData: updateData, preventClose: preventClose, preventRender: preventRender}); | ||||
|   async _onSubmit(event, { updateData = null, preventClose = false, preventRender = false } = {}) { | ||||
|     super._onSubmit(event, { updateData: updateData, preventClose: preventClose, preventRender: preventRender }); | ||||
|     // Generate gold
 | ||||
|     let gold = event.target.elements.namedItem('gold').value; | ||||
|     const itemData = { | ||||
|  |  | |||
|  | @ -0,0 +1,29 @@ | |||
| <section class="ose chat-message"> | ||||
|     <div class="ose chat-block"> | ||||
|         <div class="flexrow chat-header"> | ||||
|             <div class="chat-title"><h2>{{title}}</h2></div> | ||||
|             <div class="chat-img" style="background-image:url('{{data.img}}')"></div> | ||||
|         </div> | ||||
|         <div class="flexrow"> | ||||
|             <ol class="flex2"> | ||||
|                 {{#each scores as |score id|}} | ||||
|                 <li class="flexrow"> | ||||
|                     <div style="text-align:right;"> | ||||
|                         {{lookup ../config.scores id}} | ||||
|                     </div> | ||||
|                     <div style="text-align:center;"> | ||||
|                         {{score}} | ||||
|                     </div> | ||||
|                 </li> | ||||
|                 {{/each}} | ||||
|             </ol> | ||||
|             <div style="margin: 0.5em 0"> | ||||
|                 <div>Sum: {{stats.sum}}</div> | ||||
|                 <div>Avg: {{stats.avg}}</div> | ||||
|                 <div>σ: {{stats.std}}</div> | ||||
|                 <hr> | ||||
|                 <div>Gold: {{gold}}</div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| </section> | ||||
		Loading…
	
		Reference in New Issue