[PR] [Feature] 652 Allow override range measurement settings (#1030)

* Look for rangeMeasurementSettingsOverride on the scene to switch off DH global range measurement settings.

* Part progress on adding config tab to scene config

* Hard coded template; no value applied/saved

* Flag fix

* Use the flags setting

* Clean up

* Remove import

* Better initialisation of PARTS and TABS

* Fix localisation

---------

Co-authored-by: Chris Ryan <chrisr@blackhole>
Co-authored-by: WBHarry <williambjrklund@gmail.com>
This commit is contained in:
Chris Ryan 2025-08-22 01:05:09 +10:00 committed by GitHub
parent 7a6bbe3488
commit 60b55619e1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 82 additions and 15 deletions

View file

@ -2,6 +2,7 @@ export * as characterCreation from './characterCreation/_module.mjs';
export * as dialogs from './dialogs/_module.mjs';
export * as hud from './hud/_module.mjs';
export * as levelup from './levelup/_module.mjs';
export * as scene from './scene/_module.mjs';
export * as settings from './settings/_module.mjs';
export * as sheets from './sheets/_module.mjs';
export * as sheetConfigs from './sheets-configs/_module.mjs';

View file

@ -0,0 +1 @@
export { default as DhSceneConfigSettings } from './sceneConfigSettings.mjs';

View file

@ -0,0 +1,25 @@
export default class DhSceneConfigSettings extends foundry.applications.sheets.SceneConfig {
constructor(options, ...args) {
super(options, ...args);
}
static buildParts() {
const { footer, ...parts } = super.PARTS;
const tmpParts = {
...parts,
dh: { template: "systems/daggerheart/templates/scene/dh-config.hbs" },
footer
}
return tmpParts;
}
static PARTS = DhSceneConfigSettings.buildParts();
static buildTabs() {
super.TABS.sheet.tabs.push({ id: "dh", icon: "fa-solid" });
return super.TABS;
}
static TABS = DhSceneConfigSettings.buildTabs();
}

View file

@ -10,29 +10,41 @@ export default class DhMeasuredTemplate extends foundry.canvas.placeables.Measur
const splitRulerText = this.ruler.text.split(' ');
if (splitRulerText.length > 0) {
const rulerValue = Number(splitRulerText[0]);
const vagueLabel = this.constructor.getDistanceLabel(rulerValue, rangeMeasurementSettings);
this.ruler.text = vagueLabel;
const result = this.constructor.getRangeLabels(rulerValue, rangeMeasurementSettings);
this.ruler.text = result.distance + result.units ? (' ' + result.units) : '';
}
}
}
static getDistanceLabel(distance, settings) {
static getRangeLabels(distance, settings) {
let result = { distance: '', units: null }
const rangeMeasurementOverride = canvas.scene.flags.daggerheart?.rangeMeasurementOverride;
if (rangeMeasurementOverride === true) {
result.distance = distance;
result.units = canvas.scene?.grid?.units;
return result
}
if (distance <= settings.melee) {
return game.i18n.localize('DAGGERHEART.CONFIG.Range.melee.name');
result.distance = game.i18n.localize('DAGGERHEART.CONFIG.Range.melee.name');
return result;
}
if (distance <= settings.veryClose) {
return game.i18n.localize('DAGGERHEART.CONFIG.Range.veryClose.name');
result.distance = game.i18n.localize('DAGGERHEART.CONFIG.Range.veryClose.name');
return result;
}
if (distance <= settings.close) {
return game.i18n.localize('DAGGERHEART.CONFIG.Range.close.name');
result.distance = game.i18n.localize('DAGGERHEART.CONFIG.Range.close.name');
return result;
}
if (distance <= settings.far) {
return game.i18n.localize('DAGGERHEART.CONFIG.Range.far.name');
result.distance = game.i18n.localize('DAGGERHEART.CONFIG.Range.far.name');
return result;
}
if (distance > settings.far) {
return game.i18n.localize('DAGGERHEART.CONFIG.Range.veryFar.name');
result.distance = game.i18n.localize('DAGGERHEART.CONFIG.Range.veryFar.name');
}
return '';
return result;
}
}

View file

@ -8,9 +8,9 @@ export default class DhpRuler extends foundry.canvas.interaction.Ruler {
const range = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.variantRules).rangeMeasurement;
if (range.enabled) {
const distance = DhMeasuredTemplate.getDistanceLabel(waypoint.measurement.distance.toNearest(0.01), range);
context.cost = { total: distance, units: null };
context.distance = { total: distance, units: null };
const result = DhMeasuredTemplate.getRangeLabels(waypoint.measurement.distance.toNearest(0.01), range);
context.cost = { total: result.distance, units: result.units };
context.distance = { total: result.distance, units: result.units };
}
return context;

View file

@ -8,9 +8,9 @@ export default class DhpTokenRuler extends foundry.canvas.placeables.tokens.Toke
const range = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.variantRules).rangeMeasurement;
if (range.enabled) {
const distance = DhMeasuredTemplate.getDistanceLabel(waypoint.measurement.distance.toNearest(0.01), range);
context.cost = { total: distance, units: null };
context.distance = { total: distance, units: null };
const result = DhMeasuredTemplate.getRangeLabels(waypoint.measurement.distance.toNearest(0.01), range);
context.cost = { total: result.distance, units: result.units };
context.distance = { total: result.distance, units: result.units };
}
return context;

View file

@ -35,5 +35,8 @@ export const preloadHandlebarsTemplates = async function () {
'systems/daggerheart/templates/ui/chat/parts/damage-part.hbs',
'systems/daggerheart/templates/ui/chat/parts/target-part.hbs',
'systems/daggerheart/templates/ui/chat/parts/button-part.hbs',
'systems/daggerheart/templates/scene/dh-config.hbs',
]);
};