mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 03:31:07 +01:00
158 lines
6.2 KiB
JavaScript
158 lines
6.2 KiB
JavaScript
export default class DhTemplateLayer extends foundry.canvas.layers.TemplateLayer {
|
|
static prepareSceneControls() {
|
|
const sc = foundry.applications.ui.SceneControls;
|
|
return {
|
|
name: 'templates',
|
|
order: 2,
|
|
title: 'CONTROLS.GroupMeasure',
|
|
icon: 'fa-solid fa-ruler-combined',
|
|
visible: game.user.can('TEMPLATE_CREATE'),
|
|
onChange: (event, active) => {
|
|
if (active) canvas.templates.activate();
|
|
},
|
|
onToolChange: () => canvas.templates.setAllRenderFlags({ refreshState: true }),
|
|
tools: {
|
|
circle: {
|
|
name: 'circle',
|
|
order: 1,
|
|
title: 'CONTROLS.MeasureCircle',
|
|
icon: 'fa-regular fa-circle',
|
|
toolclip: {
|
|
src: 'toolclips/tools/measure-circle.webm',
|
|
heading: 'CONTROLS.MeasureCircle',
|
|
items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete'])
|
|
}
|
|
},
|
|
cone: {
|
|
name: 'cone',
|
|
order: 2,
|
|
title: 'CONTROLS.MeasureCone',
|
|
icon: 'fa-solid fa-angle-left',
|
|
toolclip: {
|
|
src: 'toolclips/tools/measure-cone.webm',
|
|
heading: 'CONTROLS.MeasureCone',
|
|
items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate'])
|
|
}
|
|
},
|
|
inFront: {
|
|
name: 'inFront',
|
|
order: 3,
|
|
title: 'CONTROLS.inFront',
|
|
icon: 'fa-solid fa-eye',
|
|
toolclip: {
|
|
src: 'toolclips/tools/measure-cone.webm',
|
|
heading: 'CONTROLS.inFront',
|
|
items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate'])
|
|
}
|
|
},
|
|
rect: {
|
|
name: 'rect',
|
|
order: 4,
|
|
title: 'CONTROLS.MeasureRect',
|
|
icon: 'fa-solid fa-square',
|
|
toolclip: {
|
|
src: 'toolclips/tools/measure-rect.webm',
|
|
heading: 'CONTROLS.MeasureRect',
|
|
items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate'])
|
|
}
|
|
},
|
|
ray: {
|
|
name: 'ray',
|
|
order: 5,
|
|
title: 'CONTROLS.MeasureRay',
|
|
icon: 'fa-solid fa-up-down',
|
|
toolclip: {
|
|
src: 'toolclips/tools/measure-ray.webm',
|
|
heading: 'CONTROLS.MeasureRay',
|
|
items: sc.buildToolclipItems(['create', 'move', 'edit', 'hide', 'delete', 'rotate'])
|
|
}
|
|
},
|
|
presets: {
|
|
name: 'presets',
|
|
order: 6,
|
|
title: 'CONTROLS.Presets',
|
|
icon: 'fa-solid fa-stamp',
|
|
onChange: (event) => DhTemplateLayer.handlePreset(event),
|
|
button: true
|
|
},
|
|
settings: {
|
|
name: 'settings',
|
|
order: 7,
|
|
title: 'CONTROLS.PresetsSettings',
|
|
icon: 'fa-solid fa-gear',
|
|
onChange: (event) => DhTemplateLayer.handlePresetSettings(event),
|
|
button: true
|
|
},
|
|
clear: {
|
|
name: 'clear',
|
|
order: 8,
|
|
title: 'CONTROLS.MeasureClear',
|
|
icon: 'fa-solid fa-trash',
|
|
visible: game.user.isGM,
|
|
onChange: () => canvas.templates.deleteAll(),
|
|
button: true
|
|
}
|
|
},
|
|
activeTool: 'circle'
|
|
};
|
|
}
|
|
|
|
static handlePresetSettings(event) {
|
|
console.log("Preset settings handling goes here, event, active is: ", event);
|
|
ui.presetTemplates.open();
|
|
}
|
|
|
|
|
|
static handlePreset(event, active) {
|
|
console.log("Preset handling goes here, event, active is: ", event, active);
|
|
if (game.activeTool) {
|
|
ui.controls.activate("toggles");
|
|
}
|
|
// if (CONFIG.ux.TemplateManager.getActivePreview()) {
|
|
// return;
|
|
// }
|
|
const { width, height } = game.canvas.scene.dimensions;
|
|
const data = {
|
|
x: width / 2,
|
|
y: height / 2,
|
|
t: 'circle',
|
|
distance: 30,
|
|
fillColor: game.user.color || '#FF0000'
|
|
};
|
|
|
|
CONFIG.ux.TemplateManager.createPreview(data);
|
|
}
|
|
|
|
_onDragLeftStart(event) {
|
|
const interaction = event.interactionData;
|
|
|
|
// Snap the origin to the grid
|
|
if (!event.shiftKey) interaction.origin = this.getSnappedPoint(interaction.origin);
|
|
|
|
// Create a pending MeasuredTemplateDocument
|
|
const tool = game.activeTool === 'inFront' ? 'cone' : game.activeTool;
|
|
const previewData = {
|
|
user: game.user.id,
|
|
t: tool,
|
|
x: interaction.origin.x,
|
|
y: interaction.origin.y,
|
|
sort: Math.max(this.getMaxSort() + 1, 0),
|
|
distance: 1,
|
|
direction: 0,
|
|
fillColor: game.user.color || '#FF0000',
|
|
hidden: event.altKey
|
|
};
|
|
const defaults = CONFIG.MeasuredTemplate.defaults;
|
|
if (game.activeTool === 'cone') previewData.angle = defaults.angle;
|
|
else if (game.activeTool === 'inFront') previewData.angle = 180;
|
|
else if (game.activeTool === 'ray') previewData.width = defaults.width * canvas.dimensions.distance;
|
|
const cls = foundry.utils.getDocumentClass('MeasuredTemplate');
|
|
const doc = new cls(previewData, { parent: canvas.scene });
|
|
|
|
// Create a preview MeasuredTemplate object
|
|
const template = new this.constructor.placeableClass(doc);
|
|
doc._object = template;
|
|
interaction.preview = this.preview.addChild(template);
|
|
template.draw();
|
|
}
|
|
}
|