WIP: Generators
							parent
							
								
									e23adf87f9
								
							
						
					
					
						commit
						0ea0e25fba
					
				|  | @ -15,6 +15,7 @@ | ||||||
|   "OSE.dialog.partysheet": "Party Overview", |   "OSE.dialog.partysheet": "Party Overview", | ||||||
|   "OSE.dialog.selectActors": "Select PCs", |   "OSE.dialog.selectActors": "Select PCs", | ||||||
|   "OSE.dialog.dealXP": "Deal XP", |   "OSE.dialog.dealXP": "Deal XP", | ||||||
|  |   "OSE.dialog.generateSaves": "Generate Saves", | ||||||
| 
 | 
 | ||||||
|   "OSE.Formula": "Formula", |   "OSE.Formula": "Formula", | ||||||
|   "OSE.SitMod": "Situational Modifier", |   "OSE.SitMod": "Situational Modifier", | ||||||
|  |  | ||||||
|  | @ -15,6 +15,7 @@ | ||||||
|   "OSE.dialog.partysheet": "Fiche de Groupe", |   "OSE.dialog.partysheet": "Fiche de Groupe", | ||||||
|   "OSE.dialog.selectActors": "Choisir PJs", |   "OSE.dialog.selectActors": "Choisir PJs", | ||||||
|   "OSE.dialog.dealXP": "Donner XP", |   "OSE.dialog.dealXP": "Donner XP", | ||||||
|  |   "OSE.dialog.generateSaves": "Générer les Sauvegardes", | ||||||
| 
 | 
 | ||||||
|   "OSE.Formula": "Formule", |   "OSE.Formula": "Formule", | ||||||
|   "OSE.SitMod": "Mod. de situation", |   "OSE.SitMod": "Mod. de situation", | ||||||
|  |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| import { OseActor } from "./entity.js"; | import { OseActor } from "./entity.js"; | ||||||
| import { OseActorSheet } from "./actor-sheet.js"; | import { OseActorSheet } from "./actor-sheet.js"; | ||||||
| import { OseCharacterModifiers } from "../dialog/character-modifiers.js"; | import { OseCharacterModifiers } from "../dialog/character-modifiers.js"; | ||||||
|  | import { OseCharacterCreator } from "../dialog/character-creation.js"; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Extend the basic ActorSheet with some very simple modifications |  * Extend the basic ActorSheet with some very simple modifications | ||||||
|  | @ -33,6 +34,22 @@ export class OseActorSheetCharacter extends OseActorSheet { | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   /** | ||||||
|  |    * Character creation helpers | ||||||
|  |    * @param  {...any} args | ||||||
|  |    */ | ||||||
|  |   async _render(...args) { | ||||||
|  |     super._render(...args).then(() => { | ||||||
|  |       if (this.actor.isNew()) { | ||||||
|  |         event.preventDefault(); | ||||||
|  |         new OseCharacterCreator(this.actor, { | ||||||
|  |           top: this.position.top + 40, | ||||||
|  |           left: this.position.left + (this.position.width - 400) / 2, | ||||||
|  |         }).render(true); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  |    | ||||||
|   /** |   /** | ||||||
|    * Prepare data for rendering the Actor sheet |    * Prepare data for rendering the Actor sheet | ||||||
|    * The prepared data object contains both the actor data as well as additional sheet options |    * The prepared data object contains both the actor data as well as additional sheet options | ||||||
|  |  | ||||||
|  | @ -51,6 +51,56 @@ export class OseActor extends Actor { | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   isNew() { | ||||||
|  |     const data = this.data.data; | ||||||
|  |     if (this.data.type == 'character') { | ||||||
|  |       let ct = 0; | ||||||
|  |       Object.values(data.scores).forEach((el) => { | ||||||
|  |         ct += el.value; | ||||||
|  |       }) | ||||||
|  |       return ct == 0 ? true : false; | ||||||
|  |     } else if (this.data.type == 'monster') { | ||||||
|  |       let ct = 0; | ||||||
|  |       Object.values(data.saves).forEach(el => { | ||||||
|  |         ct += el.value; | ||||||
|  |       }); | ||||||
|  |       return ct == 0 ? true : false; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   generator() { | ||||||
|  |      | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   generateSave(hd) { | ||||||
|  |     let saves = {}; | ||||||
|  |     for (let i = 0; i <= hd; i++) { | ||||||
|  |       let tmp = CONFIG.OSE.monster_saves[i]; | ||||||
|  |       if (tmp) { | ||||||
|  |         saves = tmp; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     this.update({ | ||||||
|  |       "data.saves": { | ||||||
|  |         death: { | ||||||
|  |           value: saves.d | ||||||
|  |         }, | ||||||
|  |         wand: { | ||||||
|  |           value: saves.w | ||||||
|  |         }, | ||||||
|  |         paralysis: { | ||||||
|  |           value: saves.p | ||||||
|  |         }, | ||||||
|  |         breath: { | ||||||
|  |           value: saves.b | ||||||
|  |         }, | ||||||
|  |         spell: { | ||||||
|  |           value: saves.s | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   /*  Rolls                                       */ |   /*  Rolls                                       */ | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|  | @ -540,7 +590,7 @@ export class OseActor extends Actor { | ||||||
|     let total = 0; |     let total = 0; | ||||||
|     let treasure = this.data.items.filter(i => (i.type == "item" && i.data.treasure)) |     let treasure = this.data.items.filter(i => (i.type == "item" && i.data.treasure)) | ||||||
|     treasure.forEach((item) => { |     treasure.forEach((item) => { | ||||||
|        total += item.data.quantity.value * item.data.cost; |       total += item.data.quantity.value * item.data.cost; | ||||||
|     }); |     }); | ||||||
|     data.treasure = total; |     data.treasure = total; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -32,6 +32,38 @@ export class OseActorSheetMonster extends OseActorSheet { | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   /** | ||||||
|  |    * Monster creation helpers | ||||||
|  |    * @param  {...any} args  | ||||||
|  |    */ | ||||||
|  |   async _render(...args) { | ||||||
|  |     super._render(...args).then(() => { | ||||||
|  |       if (this.actor.isNew()) { | ||||||
|  |         const template = ` | ||||||
|  |               <form> | ||||||
|  |                <div class="form-group"> | ||||||
|  |                 <label>Hit dice count</label>  | ||||||
|  |                 <input name="total" placeholder="Hit Dice" type="text"/> | ||||||
|  |                </div> | ||||||
|  |             </form>`; | ||||||
|  |             new Dialog({ | ||||||
|  |               title: game.i18n.localize("OSE.dialog.generateSaves"), | ||||||
|  |               content: template, | ||||||
|  |               buttons: { | ||||||
|  |                 set: { | ||||||
|  |                   icon: '<i class="fas fa-dice"></i>', | ||||||
|  |                   label: game.i18n.localize("OSE.dialog.generateSaves"), | ||||||
|  |                   callback: (html) => { | ||||||
|  |                     let hd = html.find('input[name="total"]').val(); | ||||||
|  |                     this.actor.generateSave(hd); | ||||||
|  |                   }, | ||||||
|  |                 }, | ||||||
|  |               }, | ||||||
|  |             }).render(true); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /** |   /** | ||||||
|    * Prepare data for rendering the Actor sheet |    * Prepare data for rendering the Actor sheet | ||||||
|    * The prepared data object contains both the actor data as well as additional sheet options |    * The prepared data object contains both the actor data as well as additional sheet options | ||||||
|  |  | ||||||
|  | @ -87,5 +87,70 @@ export const OSE = { | ||||||
|     splash: "/systems/ose/assets/splash.png", |     splash: "/systems/ose/assets/splash.png", | ||||||
|     reload: "/systems/ose/assets/reload.png", |     reload: "/systems/ose/assets/reload.png", | ||||||
|     charge: "/systems/ose/assets/charge.png", |     charge: "/systems/ose/assets/charge.png", | ||||||
|  |   }, | ||||||
|  |   monster_saves: { | ||||||
|  |     0: { | ||||||
|  |       d: 14, | ||||||
|  |       w: 15, | ||||||
|  |       p: 16, | ||||||
|  |       b: 17, | ||||||
|  |       s: 18 | ||||||
|  |     }, | ||||||
|  |     1: { | ||||||
|  |       d: 12, | ||||||
|  |       w: 13, | ||||||
|  |       p: 14, | ||||||
|  |       b: 15, | ||||||
|  |       s: 16 | ||||||
|  |     }, | ||||||
|  |     4: { | ||||||
|  |       d: 10, | ||||||
|  |       w: 11, | ||||||
|  |       p: 12, | ||||||
|  |       b: 13, | ||||||
|  |       s: 14 | ||||||
|  |     }, | ||||||
|  |     7: { | ||||||
|  |       d: 8, | ||||||
|  |       w: 9, | ||||||
|  |       p: 10, | ||||||
|  |       b: 10, | ||||||
|  |       s: 12 | ||||||
|  |     }, | ||||||
|  |     10: { | ||||||
|  |       d: 6, | ||||||
|  |       w: 7, | ||||||
|  |       p: 8, | ||||||
|  |       b: 8, | ||||||
|  |       s: 10 | ||||||
|  |     }, | ||||||
|  |     13: { | ||||||
|  |       d: 4, | ||||||
|  |       w: 5, | ||||||
|  |       p: 6, | ||||||
|  |       b: 5, | ||||||
|  |       s: 8 | ||||||
|  |     }, | ||||||
|  |     16: { | ||||||
|  |       d: 2, | ||||||
|  |       w: 3, | ||||||
|  |       p: 4, | ||||||
|  |       b: 3, | ||||||
|  |       s: 6 | ||||||
|  |     }, | ||||||
|  |     19: { | ||||||
|  |       d: 2, | ||||||
|  |       w: 2, | ||||||
|  |       p: 2, | ||||||
|  |       b: 2, | ||||||
|  |       s: 4 | ||||||
|  |     }, | ||||||
|  |     22: { | ||||||
|  |       d: 2, | ||||||
|  |       w: 2, | ||||||
|  |       p: 2, | ||||||
|  |       b: 2, | ||||||
|  |       s: 2 | ||||||
|  |     }, | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  | @ -0,0 +1,57 @@ | ||||||
|  | // eslint-disable-next-line no-unused-vars
 | ||||||
|  | import { OseActor } from '../actor/entity.js'; | ||||||
|  | 
 | ||||||
|  | export class OseCharacterCreator extends FormApplication { | ||||||
|  |   static get defaultOptions() { | ||||||
|  |     const options = super.defaultOptions; | ||||||
|  |     options.id = 'character-creator'; | ||||||
|  |     options.template = | ||||||
|  |       'systems/ose/templates/actors/dialogs/character-creation.html'; | ||||||
|  |     options.width = 380; | ||||||
|  |     return options; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Add the Entity name into the window title | ||||||
|  |    * @type {String} | ||||||
|  |    */ | ||||||
|  |   get title() { | ||||||
|  |     return `${this.object.name}: ${game.i18n.localize('OSE.dialog.tweaks')}`; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Construct and return the data object used to render the HTML template for this form application. | ||||||
|  |    * @return {Object} | ||||||
|  |    */ | ||||||
|  |   getData() { | ||||||
|  |     let data = this.object.data; | ||||||
|  |     data.user = game.user; | ||||||
|  |     data.config = CONFIG.OSE; | ||||||
|  |     return data; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  | 
 | ||||||
|  |   /** @override */ | ||||||
|  |   activateListeners(html) { | ||||||
|  |     super.activateListeners(html); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * This method is called upon form submission after form data is validated | ||||||
|  |    * @param event {Event}       The initial triggering submission event | ||||||
|  |    * @param formData {Object}   The object of validated form data with which to update the object | ||||||
|  |    * @private | ||||||
|  |    */ | ||||||
|  |   async _updateObject(event, formData) { | ||||||
|  |     event.preventDefault(); | ||||||
|  |     // Update the actor
 | ||||||
|  |     this.object.update(formData); | ||||||
|  |     // Re-draw the updated sheet
 | ||||||
|  |     this.object.sheet.render(true); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -31,19 +31,19 @@ | ||||||
|         }, |         }, | ||||||
|         "saves": { |         "saves": { | ||||||
|           "death": { |           "death": { | ||||||
|             "value": 10 |             "value": 0 | ||||||
|           }, |           }, | ||||||
|           "wand": { |           "wand": { | ||||||
|             "value": 10 |             "value": 0 | ||||||
|           }, |           }, | ||||||
|           "paralysis": { |           "paralysis": { | ||||||
|             "value": 10 |             "value": 0 | ||||||
|           }, |           }, | ||||||
|           "breath": { |           "breath": { | ||||||
|             "value": 10 |             "value": 0 | ||||||
|           }, |           }, | ||||||
|           "spell": { |           "spell": { | ||||||
|             "value": 10 |             "value": 0 | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|         "movement": { |         "movement": { | ||||||
|  |  | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | <form autocomplete="off" onsubmit="event.preventDefault();"> | ||||||
|  |     <ol class="attribute-list"> | ||||||
|  |         {{#each config.scores as |score id| }} | ||||||
|  |         <li data-score="{{id}}">{{score}}</li> | ||||||
|  |         {{/each}} | ||||||
|  |     </ol> | ||||||
|  | </form> | ||||||
		Loading…
	
		Reference in New Issue