mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-07-23 10:59:54 +02:00
Merge branch 'main' into feature/transform-linked-actors
This commit is contained in:
commit
731be03277
24 changed files with 1123 additions and 1304 deletions
|
|
@ -7,7 +7,7 @@ export default class AdversarySheet extends DHBaseActorSheet {
|
|||
/** @inheritDoc */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ['adversary'],
|
||||
position: { width: 660, height: 766 },
|
||||
position: { width: 645, height: 760 },
|
||||
window: { resizable: true },
|
||||
actions: {
|
||||
toggleHitPoints: AdversarySheet.#toggleHitPoints,
|
||||
|
|
@ -58,12 +58,13 @@ export default class AdversarySheet extends DHBaseActorSheet {
|
|||
template: 'systems/daggerheart/templates/sheets/actors/adversary/features.hbs',
|
||||
scrollable: ['.feature-section']
|
||||
},
|
||||
notes: {
|
||||
template: 'systems/daggerheart/templates/sheets/actors/adversary/notes.hbs'
|
||||
},
|
||||
effects: {
|
||||
template: 'systems/daggerheart/templates/sheets/actors/adversary/effects.hbs',
|
||||
scrollable: ['.effects-sections']
|
||||
},
|
||||
notes: {
|
||||
template: 'systems/daggerheart/templates/sheets/actors/adversary/notes.hbs',
|
||||
scrollable: ['.editor-content']
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1057,7 +1057,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
|||
direction: 'DOWN'
|
||||
});
|
||||
|
||||
html.querySelectorAll('.armor-slot').forEach(element => {
|
||||
html.querySelectorAll('.armor .slot').forEach(element => {
|
||||
element.addEventListener('click', CharacterSheet.armorSourcePipUpdate);
|
||||
});
|
||||
}
|
||||
|
|
@ -1072,7 +1072,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
|||
|
||||
/** Update specific armor source */
|
||||
static async armorSourcePipUpdate(event) {
|
||||
const target = event.target.closest('.armor-slot');
|
||||
const target = event.target.closest('.slot');
|
||||
const { uuid, value } = target.dataset;
|
||||
const document = await foundry.utils.fromUuid(uuid);
|
||||
|
||||
|
|
@ -1100,7 +1100,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
|||
}
|
||||
|
||||
const container = target.closest('.slot-bar');
|
||||
for (const armorSlot of container.querySelectorAll('.armor-slot i')) {
|
||||
for (const armorSlot of container.querySelectorAll('.armor .slot i')) {
|
||||
const index = Number.parseInt(armorSlot.dataset.index);
|
||||
if (decreasing && index >= newCurrent) {
|
||||
armorSlot.classList.remove('fa-shield');
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ export default class DhRegionLayer extends foundry.canvas.layers.RegionLayer {
|
|||
return inBounds.length === 1 ? inBounds[0] : null;
|
||||
}
|
||||
|
||||
static getTemplateShape({ type, angle, range, direction } = {}) {
|
||||
static getTemplateShape({ shapeType, angle, range, direction, hasHole } = {}) {
|
||||
const { line, rectangle, inFront, cone, circle, emanation } = CONFIG.DH.GENERAL.templateTypes;
|
||||
|
||||
/* Length calculation */
|
||||
|
|
@ -112,11 +112,11 @@ export default class DhRegionLayer extends foundry.canvas.layers.RegionLayer {
|
|||
|
||||
const shapeData = {
|
||||
...canvas.mousePosition,
|
||||
type: type,
|
||||
type: shapeType,
|
||||
direction: direction ?? 0
|
||||
};
|
||||
|
||||
switch (type) {
|
||||
switch (shapeType) {
|
||||
case rectangle.id:
|
||||
shapeData.width = length;
|
||||
shapeData.height = length;
|
||||
|
|
@ -145,7 +145,8 @@ export default class DhRegionLayer extends foundry.canvas.layers.RegionLayer {
|
|||
y: 0,
|
||||
width: 1,
|
||||
height: 1,
|
||||
shape: game.canvas.grid.isHexagonal ? CONST.TOKEN_SHAPES.ELLIPSE_1 : CONST.TOKEN_SHAPES.RECTANGLE_1
|
||||
shape: game.canvas.grid.isHexagonal ? CONST.TOKEN_SHAPES.ELLIPSE_1 : CONST.TOKEN_SHAPES.RECTANGLE_1,
|
||||
hole: hasHole
|
||||
};
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,6 +119,10 @@ export const advantageState = {
|
|||
export const areaTypes = {
|
||||
placed: {
|
||||
id: 'placed',
|
||||
label: 'Placed Area'
|
||||
label: 'DAGGERHEART.CONFIG.AreaTypes.placed.label'
|
||||
},
|
||||
attached: {
|
||||
id: 'attached',
|
||||
label: 'DAGGERHEART.CONFIG.AreaTypes.attached.label'
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -33,6 +33,10 @@ export default class AreasField extends fields.ArrayField {
|
|||
initial: CONFIG.DH.GENERAL.range.veryClose.id,
|
||||
label: 'DAGGERHEART.ACTIONS.Config.area.size'
|
||||
}),
|
||||
hasHole: new fields.BooleanField({
|
||||
initial: false,
|
||||
label: 'DAGGERHEART.ACTIONS.Config.area.hasHole'
|
||||
}),
|
||||
effects: new fields.ArrayField(new fields.DocumentIdField())
|
||||
});
|
||||
super(element, options, context);
|
||||
|
|
|
|||
|
|
@ -276,8 +276,12 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
|
|||
async onCreateAreas(event) {
|
||||
const createArea = async selectedArea => {
|
||||
const effects = selectedArea.effects.map(effect => this.system.action.item.effects.get(effect).uuid);
|
||||
const { shape: type, size: range } = selectedArea;
|
||||
const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({ type, range });
|
||||
const { shape: shapeType, size: range, hasHole } = selectedArea;
|
||||
const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({
|
||||
shapeType,
|
||||
range,
|
||||
hasHole
|
||||
});
|
||||
|
||||
const scene = game.scenes.get(game.user.viewedScene);
|
||||
const level = scene.levels.find(x => x.isView);
|
||||
|
|
@ -305,7 +309,10 @@ export default class DhpChatMessage extends foundry.documents.ChatMessage {
|
|||
visibility: CONST.REGION_VISIBILITY.ALWAYS
|
||||
};
|
||||
const placeRegion = data => {
|
||||
canvas.regions.placeRegion(data, { create: true });
|
||||
canvas.regions.placeRegion(data, {
|
||||
create: true,
|
||||
attachToToken: selectedArea.type === CONFIG.DH.ACTIONS.areaTypes.attached.id
|
||||
});
|
||||
};
|
||||
|
||||
// Regions with effects must be placed by the GM
|
||||
|
|
|
|||
|
|
@ -58,10 +58,11 @@ export const renderMeasuredTemplate = async event => {
|
|||
if (!type || !range || !game.canvas.scene) return;
|
||||
|
||||
const shapeData = CONFIG.Canvas.layers.regions.layerClass.getTemplateShape({
|
||||
type,
|
||||
shapetype: type,
|
||||
angle,
|
||||
range,
|
||||
direction
|
||||
direction,
|
||||
hasHole: false
|
||||
});
|
||||
|
||||
await canvas.regions.placeRegion(
|
||||
|
|
|
|||
|
|
@ -893,13 +893,12 @@ export function shouldUseHopeFearAutomation(options = { gmAsPlayer: true }) {
|
|||
|
||||
export async function getWorldActor(baseActor) {
|
||||
if (baseActor.inCompendium) {
|
||||
const worldActorCopy = game.actors.find(x =>
|
||||
x._stats.compendiumSource === baseActor.uuid &&
|
||||
(!x.prototypeToken.actorLink || x.name === baseActor.name)
|
||||
const worldActorCandidates = game.actors.filter(x =>
|
||||
x._stats.compendiumSource === baseActor.uuid &&
|
||||
x.prototypeToken.actorLink === baseActor.prototypeToken.actorLink
|
||||
);
|
||||
|
||||
if (worldActorCopy)
|
||||
return worldActorCopy;
|
||||
const worldActorCopy = worldActorCandidates.find(a => a.name === baseActor.name) ?? worldActorCandidates[0];
|
||||
if (worldActorCopy) return worldActorCopy;
|
||||
|
||||
const baseActorData = baseActor;
|
||||
return await game.system.api.documents.DhpActor.create({
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue