basic roll modification logic

This commit is contained in:
The Last Scrub
2020-11-21 18:51:58 -08:00
parent adb9fef316
commit 81fb80b639
6 changed files with 102 additions and 6 deletions
+1
View File
@@ -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: ",
+1
View File
@@ -90,6 +90,7 @@
"DG.Roll.Damage": "ダメージ",
"DG.Roll.RollingDamageFor": "ダメージ・ロール:",
"DG.Roll.Or": " / ",
"DG.Roll.Roll": "振る",
"DG.Physical.Wounds": "傷",
"DG.Physical.FirstAidLabel": "応急処置は既に施された",
+71 -5
View File
@@ -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 += `</div>`;
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;
+6 -1
View File
@@ -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) {
+12
View File
@@ -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"
]);
};
@@ -0,0 +1,11 @@
<form>
<div>
<div>
<p>Skill: {{data.label}}</p>
</div>
<br>
<label>Original Target: {{data.originalTarget}}</label>
<label>Modify Target<label>
<input id="test" type="number" name="targetModifier" value="{{data.targetModifier}}" />
</div>
</form>