diff --git a/daggerheart.mjs b/daggerheart.mjs index b5da2c3e..89c74e00 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -59,6 +59,8 @@ CONFIG.Canvas.layers.tokens.layerClass = DhTokenLayer; CONFIG.MeasuredTemplate.objectClass = placeables.DhMeasuredTemplate; +CONFIG.Region.objectClass = placeables.DhRegion; + CONFIG.RollTable.documentClass = documents.DhRollTable; CONFIG.RollTable.resultTemplate = 'systems/daggerheart/templates/ui/chat/table-result.hbs'; diff --git a/lang/en.json b/lang/en.json index 24d6168a..cc5c778d 100755 --- a/lang/en.json +++ b/lang/en.json @@ -1222,8 +1222,8 @@ "cone": "Cone", "emanation": "Emanation", "inFront": "In Front", - "rect": "Rectangle", - "ray": "Ray" + "rectangle": "Rectangle", + "line": "Line" }, "TokenSize": { "tiny": "Tiny", diff --git a/module/applications/sheets-configs/environment-settings.mjs b/module/applications/sheets-configs/environment-settings.mjs index 5c039f85..bc0efef2 100644 --- a/module/applications/sheets-configs/environment-settings.mjs +++ b/module/applications/sheets-configs/environment-settings.mjs @@ -68,9 +68,9 @@ export default class DHEnvironmentSettings extends DHBaseActorSettings { */ static async #addCategory() { await this.actor.update({ - [`system.potentialAdversaries.${foundry.utils.randomID()}.label`]: game.i18n.localize( - 'DAGGERHEART.ACTORS.Environment.newAdversary' - ) + [`system.potentialAdversaries.${foundry.utils.randomID()}`]: { + label: game.i18n.localize('DAGGERHEART.ACTORS.Environment.newAdversary') + } }); } @@ -138,4 +138,8 @@ export default class DHEnvironmentSettings extends DHBaseActorSettings { this.render(); } } + + async _onDropItem(event, item) { + console.log(item); + } } diff --git a/module/canvas/placeables/_module.mjs b/module/canvas/placeables/_module.mjs index 6ba047fb..8746aabd 100644 --- a/module/canvas/placeables/_module.mjs +++ b/module/canvas/placeables/_module.mjs @@ -1,5 +1,6 @@ export { default as DhMeasuredTemplate } from './measuredTemplate.mjs'; export { default as DhRuler } from './ruler.mjs'; +export { default as DhRegion } from './region.mjs'; export { default as DhRegionLayer } from './regionLayer.mjs'; export { default as DhTokenPlaceable } from './token.mjs'; export { default as DhTokenRuler } from './tokenRuler.mjs'; diff --git a/module/canvas/placeables/region.mjs b/module/canvas/placeables/region.mjs new file mode 100644 index 00000000..7ad94b2f --- /dev/null +++ b/module/canvas/placeables/region.mjs @@ -0,0 +1,12 @@ +import DhMeasuredTemplate from './measuredTemplate.mjs'; + +export default class DhRegion extends foundry.canvas.placeables.Region { + /**@inheritdoc */ + _formatMeasuredDistance(distance) { + const range = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.variantRules).rangeMeasurement; + if (!range.enabled) return super._formatMeasuredDistance(distance); + + const { distance: resultDistance, units } = DhMeasuredTemplate.getRangeLabels(distance, range); + return `${resultDistance} ${units}`; + } +} diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index 165342b4..685b725f 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -74,8 +74,8 @@ export const range = { export const templateTypes = { CIRCLE: 'circle', CONE: 'cone', - RECTANGLE: 'rect', - RAY: 'ray', + RECTANGLE: 'rectangle', + LINE: 'line', EMANATION: 'emanation', INFRONT: 'inFront' }; diff --git a/module/data/actor/environment.mjs b/module/data/actor/environment.mjs index 0aaf8eb0..c4a3f747 100644 --- a/module/data/actor/environment.mjs +++ b/module/data/actor/environment.mjs @@ -37,7 +37,7 @@ export default class DhEnvironment extends BaseDataActor { potentialAdversaries: new fields.TypedObjectField( new fields.SchemaField({ label: new fields.StringField(), - adversaries: new ForeignDocumentUUIDArrayField({ type: 'Actor' }) + adversaries: new ForeignDocumentUUIDArrayField({ type: 'Actor' }, { required: false, initial: [] }) }) ), notes: new fields.HTMLField() diff --git a/module/data/fields/foreignDocumentUUIDArrayField.mjs b/module/data/fields/foreignDocumentUUIDArrayField.mjs index 0ddd126c..456c0593 100644 --- a/module/data/fields/foreignDocumentUUIDArrayField.mjs +++ b/module/data/fields/foreignDocumentUUIDArrayField.mjs @@ -14,7 +14,7 @@ export default class ForeignDocumentUUIDArrayField extends foundry.data.fields.A /** @inheritdoc */ initialize(value, model, options = {}) { - const v = super.initialize(value, model, options); + const v = super.initialize(value ?? [], model, options); return () => { const data = v.map(entry => (typeof entry === 'function' ? entry() : entry)); return this.options.prune ? data.filter(d => !!d) : data; diff --git a/module/enrichers/TemplateEnricher.mjs b/module/enrichers/TemplateEnricher.mjs index ab3d406f..fd0e78eb 100644 --- a/module/enrichers/TemplateEnricher.mjs +++ b/module/enrichers/TemplateEnricher.mjs @@ -49,6 +49,8 @@ export default function DhTemplateEnricher(match, _options) { } export const renderMeasuredTemplate = async event => { + const { LINE, RECTANGLE, INFRONT, CONE } = CONFIG.DH.GENERAL.templateTypes; + const button = event.currentTarget, type = button.dataset.type, range = button.dataset.range, @@ -57,13 +59,9 @@ export const renderMeasuredTemplate = async event => { if (!type || !range || !game.canvas.scene) return; - const usedType = type === 'inFront' ? 'cone' : type === 'emanation' ? 'circle' : type; + const usedType = type === 'inFront' ? 'cone' : type; const usedAngle = - type === CONFIG.DH.GENERAL.templateTypes.CONE - ? (angle ?? CONFIG.MeasuredTemplate.defaults.angle) - : type === CONFIG.DH.GENERAL.templateTypes.INFRONT - ? '180' - : undefined; + type === CONE ? (angle ?? CONFIG.MeasuredTemplate.defaults.angle) : type === INFRONT ? '180' : undefined; let baseDistance = range; if (Number.isNaN(Number(range))) { @@ -71,16 +69,32 @@ export const renderMeasuredTemplate = async event => { range ]; } - const distance = type === CONFIG.DH.GENERAL.templateTypes.EMANATION ? baseDistance + 2.5 : baseDistance; - const radius = (distance / game.scenes.active.grid.distance) * game.scenes.active.grid.size; + + const dimensionConstant = game.scenes.active.grid.size / game.scenes.active.grid.distance; + + baseDistance *= dimensionConstant; + + const length = baseDistance; + const radius = length; + + const shapeWidth = type === LINE ? 5 * dimensionConstant : type === RECTANGLE ? length : undefined; const { width, height } = game.canvas.scene.dimensions; const shapeData = { x: width / 2, y: height / 2, + base: { + type: 'token', + x: 0, + y: 0, + width: 1, + height: 1, + shape: game.canvas.grid.isHexagonal ? CONST.TOKEN_SHAPES.ELLIPSE_1 : CONST.TOKEN_SHAPES.RECTANGLE_1 + }, t: usedType, - distance: distance, - width: type === CONFIG.DH.GENERAL.templateTypes.RAY ? 5 : undefined, + length: length, + width: shapeWidth, + height: length, angle: usedAngle, radius: radius, direction: direction, diff --git a/system.json b/system.json index 48a2319a..14d61851 100644 --- a/system.json +++ b/system.json @@ -4,8 +4,8 @@ "description": "An unofficial implementation of the Daggerheart system", "version": "2.0.0", "compatibility": { - "minimum": "14.354", - "verified": "14.354", + "minimum": "14.355", + "verified": "14.355", "maximum": "14" }, "authors": [