WIP: Settings and revamp
							parent
							
								
									647727f1ae
								
							
						
					
					
						commit
						d55ec24342
					
				|  | @ -28,15 +28,15 @@ | |||
|     "OSE.scores.cha.short": "CHA", | ||||
| 
 | ||||
|     "OSE.saves.death.short": "D", | ||||
|     "OSE.saves.death.long": "Death", | ||||
|     "OSE.saves.death.long": "Death, Poison", | ||||
|     "OSE.saves.wands.short": "W", | ||||
|     "OSE.saves.wands.long": "Wands", | ||||
|     "OSE.saves.wands.long": "Wand", | ||||
|     "OSE.saves.paralysis.short": "P", | ||||
|     "OSE.saves.paralysis.long": "Paralysis", | ||||
|     "OSE.saves.paralysis.long": "Paralysis, Petrify", | ||||
|     "OSE.saves.breath.short": "B", | ||||
|     "OSE.saves.breath.long": "Breath", | ||||
|     "OSE.saves.breath.long": "Dragon Breath", | ||||
|     "OSE.saves.spells.short": "S", | ||||
|     "OSE.saves.spells.long": "Spells", | ||||
|     "OSE.saves.spells.long": "Rod, Staff, Spell", | ||||
| 
 | ||||
|     "OSE.Health": "Hit Points", | ||||
|     "OSE.HealthShort": "HP", | ||||
|  | @ -49,6 +49,10 @@ | |||
|     "OSE.ArmorClassShort": "AC", | ||||
|     "OSE.SpellDC": "DC", | ||||
|     "OSE.Thac0": "THAC0", | ||||
|     "OSE.MeleeShort": "MEL", | ||||
|     "OSE.Melee": "Melee", | ||||
|     "OSE.MissileShort": "MIS", | ||||
|     "OSE.Missile": "Missile", | ||||
|     "OSE.Initiative": "Initiative", | ||||
|     "OSE.InitiativeShort": "INIT", | ||||
|     "OSE.Attacks": "Attacks Usable per Round", | ||||
|  | @ -61,5 +65,14 @@ | |||
|     "OSE.category.notes": "Notes", | ||||
|      | ||||
|     "OSE.panel.abilities": "Abilities", | ||||
|     "OSE.panel.equipment": "Equipment" | ||||
|     "OSE.panel.equipment": "Equipment", | ||||
| 
 | ||||
|     "OSE.Setting.IndividualInit": "Individual Initiative", | ||||
|     "OSE.Setting.IndividualInitHint": "Initiative is rolled for each actor and modified by its DEX score", | ||||
|     "OSE.Setting.AscendingAC": "Ascending Armor Class", | ||||
|     "OSE.Setting.AscendingACHint": "The more the better", | ||||
|     "OSE.Setting.Morale": "Enable Monster Morale checks", | ||||
|     "OSE.Setting.MoraleHint": "Morale Rating is shown on monster sheets", | ||||
|     "OSE.Setting.THAC0Attacks": "Attacks with THAC0", | ||||
|     "OSE.Setting.THAC0AttacksHint": "Attacks are resolved using the THAC0 value" | ||||
| } | ||||
|  | @ -0,0 +1,35 @@ | |||
| import { OseActor } from "./entity.js"; | ||||
| 
 | ||||
| export class OseActorSheet extends ActorSheet { | ||||
|     constructor(...args) { | ||||
|       super(...args); | ||||
|     } | ||||
|     /* -------------------------------------------- */ | ||||
|    | ||||
|     // Override to set resizable initial size
 | ||||
|     async _renderInner(...args) { | ||||
|       const html = await super._renderInner(...args); | ||||
|       this.form = html[0]; | ||||
|    | ||||
|       // Resize resizable classes
 | ||||
|       let resizable = html.find('.resizable'); | ||||
|       if (resizable.length == 0) { | ||||
|         return; | ||||
|       } | ||||
|       resizable.each((_, el) => { | ||||
|         let heightDelta = this.position.height - (this.options.height); | ||||
|         el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`; | ||||
|       }); | ||||
|       return html; | ||||
|     } | ||||
|      | ||||
|     async _onResize(event) { | ||||
|       super._onResize(event); | ||||
|       let html = $(event.path); | ||||
|       let resizable = html.find('.resizable'); | ||||
|       resizable.each((_, el) => { | ||||
|         let heightDelta = this.position.height - (this.options.height); | ||||
|         el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`; | ||||
|       }); | ||||
|     } | ||||
| } | ||||
|  | @ -1,9 +1,10 @@ | |||
| import { OseActor } from "./entity.js"; | ||||
| import { OseActorSheet } from "./actor-sheet.js"; | ||||
| 
 | ||||
| /** | ||||
|  * Extend the basic ActorSheet with some very simple modifications | ||||
|  */ | ||||
| export class OseActorSheetCharacter extends ActorSheet { | ||||
| export class OseActorSheetCharacter extends OseActorSheet { | ||||
|   constructor(...args) { | ||||
|     super(...args); | ||||
|   } | ||||
|  | @ -31,22 +32,6 @@ export class OseActorSheetCharacter extends ActorSheet { | |||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   /* -------------------------------------------- */ | ||||
| 
 | ||||
|   // Override to set resizable initial size
 | ||||
|   async _renderInner(...args) { | ||||
|     const html = await super._renderInner(...args); | ||||
|     this.form = html[0]; | ||||
| 
 | ||||
|     // Resize resizable classes
 | ||||
|     let resizable = html.find('.resizable'); | ||||
|     resizable.each((_, el) => { | ||||
|       let heightDelta = this.position.height - (this.options.height); | ||||
|       el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`; | ||||
|     }); | ||||
|     return html; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Prepare data for rendering the Actor sheet | ||||
|    * The prepared data object contains both the actor data as well as additional sheet options | ||||
|  | @ -62,7 +47,9 @@ export class OseActorSheetCharacter extends ActorSheet { | |||
|     // Prepare owned items
 | ||||
|     this._prepareItems(data); | ||||
| 
 | ||||
|     // DEBUG
 | ||||
|     // Settings
 | ||||
|     data.config.individualInit = game.settings.get('ose', 'individualInit'); | ||||
| 
 | ||||
|     return data; | ||||
|   } | ||||
| 
 | ||||
|  | @ -149,14 +136,4 @@ export class OseActorSheetCharacter extends ActorSheet { | |||
|     // Handle default listeners last so system listeners are triggered first
 | ||||
|     super.activateListeners(html); | ||||
|   } | ||||
| 
 | ||||
|   async _onResize(event) { | ||||
|     super._onResize(event); | ||||
|     let html = $(event.path); | ||||
|     let resizable = html.find('.resizable'); | ||||
|     resizable.each((_, el) => { | ||||
|       let heightDelta = this.position.height - (this.options.height); | ||||
|       el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`; | ||||
|     }); | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,9 +1,10 @@ | |||
| import { OseActor } from "./entity.js"; | ||||
| import { OseActorSheet } from "./actor-sheet.js"; | ||||
| 
 | ||||
| /** | ||||
|  * Extend the basic ActorSheet with some very simple modifications | ||||
|  */ | ||||
| export class OseActorSheetMonster extends ActorSheet { | ||||
| export class OseActorSheetMonster extends OseActorSheet { | ||||
|   constructor(...args) { | ||||
|     super(...args); | ||||
|   } | ||||
|  | @ -31,25 +32,6 @@ export class OseActorSheetMonster extends ActorSheet { | |||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   /* -------------------------------------------- */ | ||||
| 
 | ||||
|   // Override to set resizable initial size
 | ||||
|   async _renderInner(...args) { | ||||
|     const html = await super._renderInner(...args); | ||||
|     this.form = html[0]; | ||||
| 
 | ||||
|     // Resize resizable classes
 | ||||
|     let resizable = html.find('.resizable'); | ||||
|     if (resizable.length == 0) { | ||||
|       return; | ||||
|     } | ||||
|     resizable.each((_, el) => { | ||||
|       let heightDelta = this.position.height - (this.options.height); | ||||
|       el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`; | ||||
|     }); | ||||
|     return html; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Prepare data for rendering the Actor sheet | ||||
|    * The prepared data object contains both the actor data as well as additional sheet options | ||||
|  | @ -62,7 +44,9 @@ export class OseActorSheetMonster extends ActorSheet { | |||
|     // Prepare owned items
 | ||||
|     this._prepareItems(data); | ||||
| 
 | ||||
|     // DEBUG
 | ||||
|     // Settings
 | ||||
|     data.config.morale = game.settings.get('ose', 'morale'); | ||||
| 
 | ||||
|     return data; | ||||
|   } | ||||
| 
 | ||||
|  | @ -151,14 +135,4 @@ export class OseActorSheetMonster extends ActorSheet { | |||
|     // Handle default listeners last so system listeners are triggered first
 | ||||
|     super.activateListeners(html); | ||||
|   } | ||||
| 
 | ||||
|   async _onResize(event) { | ||||
|     super._onResize(event); | ||||
|     let html = $(event.path); | ||||
|     let resizable = html.find('.resizable'); | ||||
|     resizable.each((_, el) => { | ||||
|       let heightDelta = this.position.height - (this.options.height); | ||||
|       el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`; | ||||
|     }); | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,38 @@ | |||
| export const registerSettings = function () { | ||||
|     game.settings.register('ose', 'individualInit', { | ||||
|       name: game.i18n.localize('OSE.Setting.IndividualInit'), | ||||
|       hint: game.i18n.localize('OSE.Setting.IndividualInitHint'), | ||||
|       default: false, | ||||
|       scope: 'world', | ||||
|       type: Boolean, | ||||
|       config: true | ||||
|     }); | ||||
| 
 | ||||
|     game.settings.register('ose', 'ascendingAC', { | ||||
|       name: game.i18n.localize('OSE.Setting.AscendingAC'), | ||||
|       hint: game.i18n.localize('OSE.Setting.AscendingACHint'), | ||||
|       default: false, | ||||
|       scope: 'world', | ||||
|       type: Boolean, | ||||
|       config: true | ||||
|     }); | ||||
| 
 | ||||
|     game.settings.register('ose', 'morale', { | ||||
|       name: game.i18n.localize('OSE.Setting.Morale'), | ||||
|       hint: game.i18n.localize('OSE.Setting.MoraleHint'), | ||||
|       default: false, | ||||
|       scope: 'world', | ||||
|       type: Boolean, | ||||
|       config: true | ||||
|     }); | ||||
| 
 | ||||
|     game.settings.register('ose', 'thac0Attacks', { | ||||
|       name: game.i18n.localize('OSE.Setting.THAC0Attacks'), | ||||
|       hint: game.i18n.localize('OSE.Setting.THAC0AttacksHint'), | ||||
|       default: false, | ||||
|       scope: 'world', | ||||
|       type: Boolean, | ||||
|       config: true | ||||
|     }); | ||||
| } | ||||
|    | ||||
|  | @ -6,6 +6,7 @@ import { preloadHandlebarsTemplates } from "./module/preloadTemplates.js"; | |||
| import { OseActor } from "./module/actor/entity.js"; | ||||
| import { OseItem } from "./module/item/entity.js"; | ||||
| import { OSE } from "./module/config.js"; | ||||
| import { registerSettings } from './module/settings.js'; | ||||
| 
 | ||||
| // Handlebars template helpers
 | ||||
| Handlebars.registerHelper("eq", function (a, b) { | ||||
|  | @ -35,6 +36,10 @@ Hooks.once("init", async function () { | |||
|   }; | ||||
| 
 | ||||
|   CONFIG.OSE = OSE; | ||||
| 
 | ||||
|   // Register custom system settings
 | ||||
|   registerSettings(); | ||||
|    | ||||
|   CONFIG.Actor.entityClass = OseActor; | ||||
|   CONFIG.Item.entityClass = OseItem; | ||||
| 
 | ||||
|  |  | |||
|  | @ -10,6 +10,9 @@ | |||
| 
 | ||||
|   .panel { | ||||
|     border: 1px solid $colorDark; | ||||
|     &.spells { | ||||
|       border: 0; | ||||
|     } | ||||
|     .panel-title { | ||||
|       color: whitesmoke; | ||||
|       background: $colorDark; | ||||
|  | @ -95,7 +98,7 @@ | |||
|       margin: 0; | ||||
|       padding: 0; | ||||
|       .attribute { | ||||
|         margin: 10px; | ||||
|         margin: 10px 2px; | ||||
|         border: 1px solid $colorTan; | ||||
|         .attribute-name { | ||||
|           color: whitesmoke; | ||||
|  |  | |||
|  | @ -9,7 +9,8 @@ | |||
|         "alignment": "", | ||||
|         "literate": false, | ||||
|         "level": 1, | ||||
|         "xp": 0 | ||||
|         "xp": 0, | ||||
|         "xpmod": 0 | ||||
|       }, | ||||
|       "scores": { | ||||
|         "str": { | ||||
|  | @ -63,6 +64,10 @@ | |||
|         "lvl5": { | ||||
|           "value": 0, | ||||
|           "max": 0 | ||||
|         }, | ||||
|         "lvl6": { | ||||
|           "value": 0, | ||||
|           "max": 0 | ||||
|         } | ||||
|       }, | ||||
|       "hp": { | ||||
|  | @ -76,7 +81,9 @@ | |||
|       }, | ||||
|       "thac0": { | ||||
|         "value": 19, | ||||
|         "mod": 0 | ||||
|         "mod": 0, | ||||
|         "missile": 0, | ||||
|         "melee": 0 | ||||
|       }, | ||||
|       "saves": { | ||||
|         "D": 10, | ||||
|  | @ -153,6 +160,10 @@ | |||
|         "lvl5": { | ||||
|           "value": 0, | ||||
|           "max": 0 | ||||
|         }, | ||||
|         "lvl6": { | ||||
|           "value": 0, | ||||
|           "max": 0 | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <section class="flexrow"> | ||||
|     <ul class="attributes flexrow"> | ||||
|         <li class="attribute health"> | ||||
|             <h4 class="attribute-name box-title">{{ localize "OSE.HealthShort" }}</h4> | ||||
|             <h4 class="attribute-name box-title" title="{{ localize 'OSE.Health' }}">{{ localize "OSE.HealthShort" }}</h4> | ||||
|             <div class="attribute-value multiple"> | ||||
|                 <input name="data.hp.value" type="text" value="{{data.hp.value}}" data-dtype="Number" | ||||
|                     placeholder="10" /> | ||||
|  | @ -10,26 +10,42 @@ | |||
|             </div> | ||||
|         </li> | ||||
|         <li class="attribute"> | ||||
|             <h4 class="attribute-name box-title">{{ localize "OSE.ArmorClassShort" }}</h4> | ||||
|             <h4 class="attribute-name box-title" title="{{ localize 'OSE.ArmorClass' }}">{{ localize "OSE.ArmorClassShort" }}</h4> | ||||
|             <div class="attribute-value"> | ||||
|                 <input name="data.ac.value" type="text" value="{{data.ac.value}}" data-dtype="Number" | ||||
|                     placeholder="10" data-dtype="Number" /> | ||||
|             </div> | ||||
|         </li> | ||||
|         <li class="attribute"> | ||||
|             <h4 class="attribute-name box-title">{{ localize "OSE.Thac0" }}</h4> | ||||
|             <h4 class="attribute-name box-title" title="{{ localize 'OSE.Thac0' }}">{{ localize "OSE.Thac0" }}</h4> | ||||
|             <div class="attribute-value"> | ||||
|                 <input name="data.thac0.value" type="text" value="{{data.thac0.value}}" placeholder="0" | ||||
|                     data-dtype="Number" /> | ||||
|             </div> | ||||
|         </li> | ||||
|         <li class="attribute"> | ||||
|             <h4 class="attribute-name box-title">{{ localize "OSE.InitiativeShort" }}</h4> | ||||
|             <h4 class="attribute-name box-title" title="{{ localize 'OSE.Melee' }}">{{ localize "OSE.MeleeShort" }}</h4> | ||||
|             <div class="attribute-value"> | ||||
|                 <input name="data.thac0.melee" type="text" value="{{data.thac0.melee}}" placeholder="0" | ||||
|                     data-dtype="Number" /> | ||||
|             </div> | ||||
|         </li> | ||||
|         <li class="attribute"> | ||||
|             <h4 class="attribute-name box-title" title="{{ localize 'OSE.Missile' }}">{{ localize "OSE.MissileShort" }}</h4> | ||||
|             <div class="attribute-value"> | ||||
|                 <input name="data.thac0.missile" type="text" value="{{data.thac0.missile}}" placeholder="0" | ||||
|                     data-dtype="Number" /> | ||||
|             </div> | ||||
|         </li> | ||||
|         {{#if config.individualInit}} | ||||
|         <li class="attribute"> | ||||
|             <h4 class="attribute-name box-title" title="{{ localize 'OSE.Initiative' }}">{{ localize "OSE.InitiativeShort" }}</h4> | ||||
|             <div class="attribute-value"> | ||||
|                 <input name="data.initiative.value" type="text" value="{{data.initiative.value}}" | ||||
|                     placeholder="0" data-dtype="Number" /> | ||||
|             </div> | ||||
|         </li> | ||||
|         {{/if}} | ||||
|         <li class="attribute"> | ||||
|             <h4 class="attribute-name box-title">{{ localize "OSE.MovementShort" }}</h4> | ||||
|             <div class="attribute-value"> | ||||
|  |  | |||
|  | @ -52,9 +52,18 @@ | |||
|                   <input name="data.spells.lvl5.max" type="text" value="{{data.spells.lvl5.max}}" data-dtype="Number" placeholder="0" /> | ||||
|           </div> | ||||
|       </li> | ||||
|       <li class="attribute"> | ||||
|           <h4 class="attribute-name box-title">{{localize 'OSE.Level'}} 6</h4> | ||||
|           <div class="attribute-value multiple"> | ||||
|               <input name="data.spells.lvl6.value" type="text" value="{{data.spells.lvl6.value}}" | ||||
|                   placeholder="0" data-dtype="Number" /> | ||||
|                   <span class="sep"> / </span> | ||||
|                   <input name="data.spells.lvl6.max" type="text" value="{{data.spells.lvl6.max}}" data-dtype="Number" placeholder="0" /> | ||||
|           </div> | ||||
|       </li> | ||||
|   </ul> | ||||
| </section> | ||||
| <section class="panel inventory"> | ||||
| <section class="panel inventory spells"> | ||||
|   <div class="panel-title"> | ||||
|     <h4>{{localize 'OSE.category.spells'}}</h4> | ||||
|       <div class="item-controls"> | ||||
|  |  | |||
|  | @ -31,10 +31,12 @@ | |||
|         placeholder="{{ localize 'OSE.Experience' }}" /> | ||||
|       <label>{{localize 'OSE.Experience'}}</label> | ||||
|     </li> | ||||
|     {{#if config.morale}} | ||||
|     <li> | ||||
|       <input type="text" name="data.details.morale" value="{{data.details.morale}}" | ||||
|         placeholder="{{ localize 'OSE.Morale' }}" /> | ||||
|       <label>{{localize 'OSE.Morale'}}</label> | ||||
|     </li> | ||||
|     {{/if}} | ||||
|   </ul> | ||||
| </section> | ||||
		Loading…
	
		Reference in New Issue