diff --git a/lang/en.json b/lang/en.json index 674d8d8..5bbf312 100644 --- a/lang/en.json +++ b/lang/en.json @@ -90,6 +90,7 @@ "DG.Roll.Damage": "Damage", "DG.Roll.RollingDamageFor": "Rolling DAMAGE for", "DG.Roll.Or": "Or", + "DG.Roll.Roll": "Roll", "DG.Physical.Wounds": "Wounds", "DG.Physical.FirstAidLabel": "First Aid Has Already Been Attempted: ", diff --git a/lang/ja.json b/lang/ja.json index 70631be..6d74a75 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -90,6 +90,7 @@ "DG.Roll.Damage": "ダメージ", "DG.Roll.RollingDamageFor": "ダメージ・ロール:", "DG.Roll.Or": " / ", + "DG.Roll.Roll": "振る", "DG.Physical.Wounds": "傷", "DG.Physical.FirstAidLabel": "応急処置は既に施された", diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index df49aab..62b83b8 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -154,7 +154,8 @@ export class DeltaGreenActorSheet extends ActorSheet { }); // Rollable abilities - bind to everything with the 'Rollable' class - html.find('.rollable').click(this._onRoll.bind(this)); + //html.find('.rollable').click(this._onRoll.bind(this)); + html.find('.rollable').mousedown(this._onRoll.bind(this)); // Drag events for macros. if (this.actor.owner) { @@ -218,7 +219,7 @@ export class DeltaGreenActorSheet extends ActorSheet { htmlContent += ``; new Dialog({ - content:htmlContent, + content: htmlContent, title: game.i18n.translations.DG.Skills.AddTypedOrCustomSkill, buttons: { add:{ @@ -298,6 +299,11 @@ export class DeltaGreenActorSheet extends ActorSheet { const element = event.currentTarget; const dataset = element.dataset; + if(event && event.which === 2){ + // probably don't want rolls to trigger from a middle mouse click + return; + } + if (dataset.roll) { let roll = new Roll(dataset.roll, this.actor.data.data); let key = dataset.label ? dataset.label : ''; @@ -305,23 +311,44 @@ export class DeltaGreenActorSheet extends ActorSheet { let label = dataset.label ? `${dataset.label}` : ''; let targetVal = ""; let rollType = dataset.rolltype ? dataset.rolltype : ''; + + // if shift-click or right click, bring up roll editor dialog + let requestedModifyRoll = (event && event.shiftKey || event.which === 3); //(event && (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey)); // check the 'data-target="something" property to determine how to grab the target for the roll if(rollType === "skill" || rollType === "typeskill"){ targetVal = dataset.target; label = game.i18n.localize(label).toUpperCase(); - sendPercentileTestToChat(this.actor, label, targetVal); + + if(requestedModifyRoll){ + this._showModifyPercentileTestDialogue(this.actor, label, targetVal); + } + else{ + sendPercentileTestToChat(this.actor, label, targetVal); + } } else if(dataset.target === "statistic.x5"){ let stat = this.actor.data.data.statistics[key]; targetVal = stat.x5; label = game.i18n.localize("DG.Attributes." + key).toUpperCase(); - sendPercentileTestToChat(this.actor, label, targetVal); + + if(requestedModifyRoll){ + this._showModifyPercentileTestDialogue(this.actor, label, targetVal); + } + else{ + sendPercentileTestToChat(this.actor, label, targetVal); + } } else if(rollType === "sanity"){ targetVal = this.actor.data.data.sanity.value; label = game.i18n.localize("DG.Attributes.SAN").toUpperCase(); - sendPercentileTestToChat(this.actor, label, targetVal); + + if(requestedModifyRoll){ + this._showModifyPercentileTestDialogue(this.actor, label, targetVal); + } + else{ + sendPercentileTestToChat(this.actor, label, targetVal); + } } else if(rollType === "damage"){ // damage roll, not a skill check @@ -336,6 +363,45 @@ export class DeltaGreenActorSheet extends ActorSheet { } } + async _showModifyPercentileTestDialogue(actor, label, originalTarget){ + + let template = "systems/deltagreen/templates/dialog/modify-percentile-roll.html"; + let backingData = { + data:{ + label: label, + originalTarget: originalTarget, + targetModifier: 20 + }, + }; + + let html = await renderTemplate(template, backingData); + + new Dialog({ + content: html, + title: "Modify Roll", + default: "roll", + buttons: { + roll:{ + label: game.i18n.translations.DG.Roll.Roll, + callback: html => { + let targetModifier = html.find("[name='targetModifier']").val(); + + let newTarget = parseInt(originalTarget); + + try{ + newTarget += parseInt(targetModifier); + } + catch(ex){ + console.log(ex); + } + + sendPercentileTestToChat(actor, label, newTarget); + } + } + } + }).render(true); + } + _resetBreakingPoint(event){ event.preventDefault(); let currentBreakingPoint = 0; diff --git a/module/deltagreen.js b/module/deltagreen.js index f149ee4..aa8b92b 100644 --- a/module/deltagreen.js +++ b/module/deltagreen.js @@ -4,6 +4,8 @@ import { DeltaGreenActorSheet } from "./actor/actor-sheet.js"; import { DeltaGreenItem } from "./item/item.js"; import { DeltaGreenItemSheet } from "./item/item-sheet.js"; +import { preloadHandlebarsTemplates } from "./templates.js"; + Hooks.once('init', async function() { game.deltagreen = { @@ -30,8 +32,11 @@ Hooks.once('init', async function() { Actors.registerSheet("deltagreen", DeltaGreenActorSheet, { makeDefault: true }); Items.unregisterSheet("core", ItemSheet); Items.registerSheet("deltagreen", DeltaGreenItemSheet, { makeDefault: true }); + + // Preload Handlebars Templates + preloadHandlebarsTemplates(); - // Add Handlebars helpers, here are a few useful examples: + // Add Handlebars helpers Handlebars.registerHelper('concat', function() { var outStr = ''; for (var arg in arguments) { diff --git a/module/templates.js b/module/templates.js new file mode 100644 index 0000000..8a0099e --- /dev/null +++ b/module/templates.js @@ -0,0 +1,12 @@ +/** + * Define a set of template paths to pre-load + * Pre-loaded templates are compiled and cached for fast access when rendering + * NWE - I am not sure if there is actually much point to this + * @return {Promise} + */ +export const preloadHandlebarsTemplates = async function() { + return loadTemplates([ + "systems/deltagreen/templates/actor/actor-sheet.html", + "systems/deltagreen/templates/dialog/modify-percentile-roll.html" + ]); + }; \ No newline at end of file diff --git a/templates/dialog/modify-percentile-roll.html b/templates/dialog/modify-percentile-roll.html new file mode 100644 index 0000000..c5d68ad --- /dev/null +++ b/templates/dialog/modify-percentile-roll.html @@ -0,0 +1,11 @@ +
+
+
+

Skill: {{data.label}}

+
+
+ +
+
\ No newline at end of file