diff --git a/src/lang/de.json b/src/lang/de.json index 71d5f2a2..ffdfc5c9 100644 --- a/src/lang/de.json +++ b/src/lang/de.json @@ -211,5 +211,8 @@ "DS4.ChatVisibilityRoll": "Alle", "DS4.ChatVisibilityGmRoll": "Selbst & SL", "DS4.ChatVisibilityBlindRoll": "Nur SL", - "DS4.ChatVisibilitySelfRoll": "Nur selbst" + "DS4.ChatVisibilitySelfRoll": "Nur selbst", + "DS4.TooltipBaseValue": "Basiswert", + "DS4.TooltipModifier": "Modifikator", + "DS4.TooltipEffects": "Effekte" } diff --git a/src/lang/en.json b/src/lang/en.json index 4506977d..d5f817d6 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -211,5 +211,8 @@ "DS4.ChatVisibilityRoll": "All", "DS4.ChatVisibilityGmRoll": "Self & GM", "DS4.ChatVisibilityBlindRoll": "GM only", - "DS4.ChatVisibilitySelfRoll": "Self only" + "DS4.ChatVisibilitySelfRoll": "Self only", + "DS4.TooltipBaseValue": "Base Value", + "DS4.TooltipModifier": "Modifier", + "DS4.TooltipEffects": "Effects" } diff --git a/src/module/actor/sheets/actor-sheet.ts b/src/module/actor/sheets/actor-sheet.ts index 3edbbf0d..76448064 100644 --- a/src/module/actor/sheets/actor-sheet.ts +++ b/src/module/actor/sheets/actor-sheet.ts @@ -1,3 +1,4 @@ +import { ModifiableMaybeData } from "../../common/common-data"; import { DS4 } from "../../config"; import { DS4Item } from "../../item/item"; import { DS4ItemData } from "../../item/item-data"; @@ -50,7 +51,7 @@ export class DS4ActorSheet extends ActorSheet<ActorSheet.Data<DS4Actor>> { */ async getData(): Promise<ActorSheet.Data<DS4Actor>> { const data = { - ...(await super.getData()), + ...this._addTooltipsToData(await super.getData()), // Add the localization config to the data: config: DS4, // Add the items explicitly sorted by type to the data: @@ -59,6 +60,26 @@ export class DS4ActorSheet extends ActorSheet<ActorSheet.Data<DS4Actor>> { return data; } + protected _addTooltipsToData(data: ActorSheet.Data<DS4Actor>): ActorSheet.Data<DS4Actor> { + const valueGroups = [data.data.attributes, data.data.traits, data.data.combatValues]; + valueGroups.forEach((valueGroup) => { + Object.values(valueGroup).forEach( + (attribute: ModifiableMaybeData<number | null> & { tooltip?: string }) => { + attribute.tooltip = this._getTooltipForValue(attribute); + }, + ); + }); + return data; + } + + protected _getTooltipForValue(value: ModifiableMaybeData<number | null>): string { + return `${value.base ?? 0} (${game.i18n.localize("DS4.TooltipBaseValue")}) + ${ + value.mod ?? 0 + } (${game.i18n.localize("DS4.TooltipModifier")}) ➞ ${game.i18n.localize("DS4.TooltipEffects")} ➞ ${ + value.total ?? 0 + }`; + } + /** @override */ activateListeners(html: JQuery): void { super.activateListeners(html); diff --git a/src/scss/components/_attributes_traits.scss b/src/scss/components/_attributes_traits.scss index e0736bd4..ff99478f 100644 --- a/src/scss/components/_attributes_traits.scss +++ b/src/scss/components/_attributes_traits.scss @@ -18,6 +18,9 @@ grid-column: span 2; line-height: $default-input-height; } + .attribute-value-arrow { + padding: 0 5px; + } } } .trait { @@ -41,6 +44,9 @@ grid-column: span 2; line-height: $default-input-height; } + .trait-value-arrow { + padding: 0 5px; + } } } } diff --git a/src/templates/actor/partials/attributes-traits.hbs b/src/templates/actor/partials/attributes-traits.hbs index 9c12a6ae..e673c466 100644 --- a/src/templates/actor/partials/attributes-traits.hbs +++ b/src/templates/actor/partials/attributes-traits.hbs @@ -14,10 +14,13 @@ <div class="attribute flexrow"><label for="data.attributes.body.total" class="attribute-label ">{{attribute-label}}</label> <div class="attribute-value flex15 grid grid-8col"><input type="number" - name="data.attributes.{{attribute-key}}.base" value='{{attribute-data.base}}' data-dtype="Number" /><span> + + name="data.attributes.{{attribute-key}}.base" value='{{attribute-data.base}}' data-dtype="Number" + title="{{attribute-label}} {{localize 'DS4.TooltipBaseValue'}}" /><span> + </span><input type="number" name="data.attributes.{{attribute-key}}.mod" value='{{attribute-data.mod}}' - data-dtype="Number" /><span> = - </span><span class="attribute-value-total">{{attribute-data.total}}</span></div> + data-dtype="Number" title="{{attribute-label}} {{localize 'DS4.TooltipModifier'}}" /><span + class="attribute-value-arrow">➞</span><span class="attribute-value-total" + title="{{attribute-label}}: {{attribute-data.tooltip}}">{{attribute-data.total}}</span> + </div> </div> {{/inline}} @@ -32,10 +35,11 @@ {{#*inline "trait"}} <div class="trait flexrow"><label for="data.traits.strength.total" class="trait-label">{{trait-label}}</label> <div class="trait-value flex15 grid grid-8col"><input type="number" name="data.traits.{{trait-key}}.base" - value='{{trait-data.base}}' data-dtype="Number" /><span> + - </span><input type="number" name="data.traits.{{trait-key}}.mod" value='{{trait-data.mod}}' - data-dtype="Number" /><span> = - </span><span class="trait-value-total">{{trait-data.total}}</span></div> + value='{{trait-data.base}}' data-dtype="Number" + title="{{trait-label}} {{localize 'DS4.TooltipBaseValue'}}" /><span> + + </span><input type="number" name="data.traits.{{trait-key}}.mod" value='{{trait-data.mod}}' data-dtype="Number" + title="{{trait-label}} {{localize 'DS4.TooltipModifier'}}" /><span class=" trait-value-arrow">➞</span><span + class="trait-value-total" title="{{trait-label}}: {{trait-data.tooltip}}">{{trait-data.total}}</span></div> </div> {{/inline}} @@ -49,4 +53,4 @@ {{#each config.i18n.traits as |trait-label trait-key|}} {{> trait trait-label=trait-label trait-key=trait-key trait-data=(lookup ../data.traits trait-key)}} {{/each}} -</div> +</div> \ No newline at end of file diff --git a/src/templates/actor/partials/combat-values.hbs b/src/templates/actor/partials/combat-values.hbs index 686a7a3a..7f477517 100644 --- a/src/templates/actor/partials/combat-values.hbs +++ b/src/templates/actor/partials/combat-values.hbs @@ -7,15 +7,18 @@ !-- !-- @param combat-value-key: The key of the combat value !-- @param combat-value-data: The data for the attribute +!-- @param combat-value-label: The label for the attribute --}} {{#*inline "combat-value"}} <div class="combat-value-with-formula"> - <div class="combat-value {{combat-value-key}}"><span class="combat-value-total">{{combat-value-data.total}}</span> + <div class="combat-value {{combat-value-key}}" title="{{combat-value-label}}: {{combat-value-data.tooltip}}"><span + class="combat-value-total">{{combat-value-data.total}}</span> </div> - <div class="combat-value-formula flexrow"><span class="combat-value-base">{{combat-value-data.base}}</span><span>+</span><input + <div class="combat-value-formula flexrow"><span class="combat-value-base" + title="{{combat-value-label}} {{localize 'DS4.TooltipBaseValue'}}">{{combat-value-data.base}}</span><span>+</span><input type="number" name="data.combatValues.{{combat-value-key}}.mod" value='{{combat-value-data.mod}}' - data-dtype="Number" /> + data-dtype="Number" title="{{combat-value-label}} {{localize 'DS4.TooltipModifier'}}" /> </div> </div> {{/inline}} @@ -25,6 +28,6 @@ <div class="combat-values flexrow flex-between"> {{#each config.i18n.combatValues as |combat-value-label combat-value-key|}} {{> combat-value combat-value-key=combat-value-key combat-value-data=(lookup ../data.combatValues - combat-value-key)}} + combat-value-key) combat-value-label=combat-value-label}} {{/each}} -</div> +</div> \ No newline at end of file