diff --git a/css/dialogue.css b/css/dialogue.css new file mode 100644 index 0000000..bd98669 --- /dev/null +++ b/css/dialogue.css @@ -0,0 +1,14 @@ +.skill-modify-grid{ + display: grid; + grid-template-columns: auto auto; + align-content: left; + justify-content: left; + align-items: left; + padding: 10px; + grid-gap: 10px 15px; + } + + .numeric-label-field{ + width: 50px !important; + text-align: center !important; + } \ No newline at end of file diff --git a/lang/en.json b/lang/en.json index 4a2cd9f..cdf9df3 100644 --- a/lang/en.json +++ b/lang/en.json @@ -200,5 +200,10 @@ "DG.ItemWindow.Weapons.ArmorPiercing": "Armor Piercing", "DG.ItemWindow.Weapons.Ammo": "Ammo (Amount/Type)", "DG.ItemWindow.Weapons.Range": "Range", - "DG.ItemWindow.Weapons.KillRadius": "Kill Radius" + "DG.ItemWindow.Weapons.KillRadius": "Kill Radius", + + "DG.ModifySkillRollDialogue.Title": "Modify Roll", + "DG.ModifySkillRollDialogue.Test": "Test:", + "DG.ModifySkillRollDialogue.OriginalTarget": "Original Target:", + "DG.ModifySkillRollDialogue.TargetModifier": "Modify Target:" } \ No newline at end of file diff --git a/lang/ja.json b/lang/ja.json index 6d74a75..fa463fa 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -200,5 +200,10 @@ "DG.ItemWindow.Weapons.ArmorPiercing": "武具貫通", "DG.ItemWindow.Weapons.Ammo": "弾 (量/種類/など)", "DG.ItemWindow.Weapons.Range": "距離", - "DG.ItemWindow.Weapons.KillRadius": "致命の半径" + "DG.ItemWindow.Weapons.KillRadius": "致命の半径", + + "DG.ModifySkillRollDialogue.Title": "ロールの変更", + "DG.ModifySkillRollDialogue.Test": "テスト:", + "DG.ModifySkillRollDialogue.OriginalTarget": "元のターゲット:", + "DG.ModifySkillRollDialogue.TargetModifier": "変換:" } \ No newline at end of file diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 62b83b8..066c217 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -1,4 +1,4 @@ -import { sendPercentileTestToChat, sendLethalityTestToChat, sendDamageRollToChat } from "../roll/roll.js" +import { sendPercentileTestToChat, sendLethalityTestToChat, sendDamageRollToChat, showModifyPercentileTestDialogue } from "../roll/roll.js" /** * Extend the basic ActorSheet with some very simple modifications * @extends {ActorSheet} @@ -300,18 +300,20 @@ export class DeltaGreenActorSheet extends ActorSheet { const dataset = element.dataset; if(event && event.which === 2){ - // probably don't want rolls to trigger from a middle mouse click + // probably don't want rolls to trigger from a middle mouse click so just kill it here return; } if (dataset.roll) { - let roll = new Roll(dataset.roll, this.actor.data.data); + //let roll = new Roll(dataset.roll, this.actor.data.data); let key = dataset.label ? dataset.label : ''; - //let label = dataset.label ? `Rolling ${dataset.label.toUpperCase()}` : ''; let label = dataset.label ? `${dataset.label}` : ''; let targetVal = ""; let rollType = dataset.rolltype ? dataset.rolltype : ''; + let isDamageRoll = false; + let isLethalityRoll = false; + // 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)); @@ -319,87 +321,51 @@ export class DeltaGreenActorSheet extends ActorSheet { if(rollType === "skill" || rollType === "typeskill"){ targetVal = dataset.target; label = game.i18n.localize(label).toUpperCase(); - - 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(); - - 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(); - - if(requestedModifyRoll){ - this._showModifyPercentileTestDialogue(this.actor, label, targetVal); - } - else{ - sendPercentileTestToChat(this.actor, label, targetVal); - } } else if(rollType === "damage"){ // damage roll, not a skill check + isDamageRoll = true; label = dataset.label ? dataset.label : ''; - sendDamageRollToChat(this.actor, label, dataset.roll); } else if(rollType === "lethality"){ // a lethality roll + isLethalityRoll = true; targetVal = dataset.target; - sendLethalityTestToChat(this.actor, label, targetVal); } - } - } - 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); - } + if(isDamageRoll){ + if(requestedModifyRoll){ + // TO DO: Damage roll modifier dialogue + } + else{ + sendDamageRollToChat(this.actor, label, dataset.roll); } } - }).render(true); + else{ + if(requestedModifyRoll){ + showModifyPercentileTestDialogue(this.actor, label, targetVal, isLethalityRoll); + } + else{ + if(isLethalityRoll) + { + sendLethalityTestToChat(this.actor, label, targetVal); + } + else{ + sendPercentileTestToChat(this.actor, label, targetVal); + } + + } + } + } } _resetBreakingPoint(event){ diff --git a/module/roll/roll.js b/module/roll/roll.js index 3c1b3a0..d516a89 100644 --- a/module/roll/roll.js +++ b/module/roll/roll.js @@ -187,4 +187,50 @@ export function sendPercentileTestToChat(actor, skill, target){ roll: roll, rollMode: game.settings.get("core", "rollMode") }); + } + + export async function showModifyPercentileTestDialogue(actor, label, originalTarget, isLethalityTest){ + + 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: game.i18n.localize("DG.ModifySkillRollDialogue.Title"), + default: "roll", + buttons: { + roll:{ + label: game.i18n.translations.DG.Roll.Roll, + + callback: html => { + try{ + let targetModifier = html.find("[name='targetModifier']").val(); // this is text as a heads up + + let newTarget = parseInt(originalTarget); // this should be an int, but technically the incoming value is text, so parse it just to be safe + + newTarget += parseInt(targetModifier); + + if(isLethalityTest){ + sendLethalityTestToChat(actor, label, newTarget); + } + else{ + sendPercentileTestToChat(actor, label, newTarget); + } + } + catch(ex){ + console.log(ex); + } + } + } + } + } + ).render(true); } \ No newline at end of file diff --git a/system.json b/system.json index 7781cb9..1afcb78 100644 --- a/system.json +++ b/system.json @@ -8,7 +8,7 @@ "templateVersion": 2, "author": "TheLastScrub (https://github.com/TheLastScrub)", "esmodules": ["module/deltagreen.js"], - "styles": ["css/deltagreen.css"], + "styles": ["css/deltagreen.css", "css/dialogue.css"], "scripts": [], "packs": [ { diff --git a/templates/dialog/modify-percentile-roll.html b/templates/dialog/modify-percentile-roll.html index c5d68ad..e1304bc 100644 --- a/templates/dialog/modify-percentile-roll.html +++ b/templates/dialog/modify-percentile-roll.html @@ -1,11 +1,12 @@
-
-
-

Skill: {{data.label}}

-
-
- -