This commit is contained in:
WBHarry 2026-04-19 11:36:33 +02:00
parent cac00e4b30
commit 58b855389d
8 changed files with 52 additions and 24 deletions

View file

@ -25,7 +25,7 @@ export default class DHActionConfig extends DHActionBaseConfig {
const data = this.action.toObject();
const created = await this.action.item.createEmbeddedDocuments('ActiveEffect', [
game.system.api.data.activeEffects.BaseEffect.getDefaultObject()
game.system.api.data.activeEffects.BaseEffect.getDefaultObject({ transfer: false })
]);
if (areaIndex !== undefined)

View file

@ -31,21 +31,38 @@ export default class DHActionSettingsConfig extends DHActionBaseConfig {
}
static async addEffect(_event) {
const { areaIndex } = event.target.dataset;
if (!this.action.effects) return;
const effectData = game.system.api.data.activeEffects.BaseEffect.getDefaultObject();
const effectData = game.system.api.data.activeEffects.BaseEffect.getDefaultObject({ transfer: false });
const data = this.action.toObject();
this.sheetUpdate(data, effectData);
this.effects = [...this.effects, effectData];
if(areaIndex !== undefined)
data.area[areaIndex].effects.push(effectData.id);
else
data.effects.push({ _id: effectData.id });
this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) });
}
static removeEffect(event, button) {
if (!this.action.effects) return;
const index = button.dataset.index,
const { areaIndex, index } = button.dataset;
let effectId = null;
if (areaIndex !== undefined) {
effectId = this.action.area[areaIndex].effects[index];
const data = this.action.toObject();
data.area[areaIndex].effects.splice(index, 1);
this.constructor.updateForm.bind(this)(null, null, { object: foundry.utils.flattenObject(data) });
} else {
effectId = this.action.effects[index]._id;
this.constructor.removeElement.bind(this)(event, button);
}
this.sheetUpdate(
this.action.toObject(),
this.effects.find(x => x.id === effectId),

View file

@ -134,13 +134,14 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel {
return armorChange.getArmorData();
}
static getDefaultObject() {
static getDefaultObject(options = { transfer: true }) {
return {
name: 'New Effect',
id: foundry.utils.randomID(),
disabled: false,
img: 'icons/magic/life/heart-cross-blue.webp',
description: '',
transfer: options.transfer,
statuses: [],
changes: [],
system: {

View file

@ -1,7 +1,7 @@
export default class DhApplyActiveEffect extends CONFIG.RegionBehavior.dataModels.applyActiveEffect {
static async #getApplicableEffects(token) {
const effects = await Promise.all(this.effects.map(fromUuid));
return (effects).filter(effect => !effect.system.targetDispositions.size || effect.system.targetDispositions.has(token.disposition));
const effects = await Promise.all(this.effects.map(foundry.utils.fromUuid));
return effects.filter(effect => !effect.system.targetDispositions.size || effect.system.targetDispositions.has(token.disposition));
}
static async #onTokenEnter(event) {

View file

@ -17,7 +17,6 @@ export default class RegisterHandlebarsHelpers {
pluralize: this.pluralize,
positive: this.positive,
isNullish: this.isNullish,
debug: this.debug,
});
}
static add(a, b) {
@ -93,9 +92,4 @@ export default class RegisterHandlebarsHelpers {
static isNullish(a) {
return a === null || a === undefined;
}
static debug(a) {
console.log(a);
return a;
}
}

View file

@ -24,6 +24,15 @@
width: 100%;
list-style-type: none;
&.bordered {
border: 1px solid;
border-radius: 6px;
.inventory-item-header .img-portait img.item-img {
border-radius: 6px 0 0 6px;
}
}
&:not(.single-img) {
.img-portait:has(.roll-img):hover {
.roll-img {

View file

@ -147,4 +147,10 @@
padding-bottom: 7px;
}
}
.sub-section-header {
display: flex;
align-items: center;
gap: 4px;
}
}

View file

@ -5,21 +5,23 @@
</legend>
{{#each source as |area index|}}
{{#unless @first}}<line-div></line-div>{{/unless}}
<div class="nest-inputs">
{{formField ../fields.type value=area.type name=(concat "area." index ".type") localize=true}}
{{formField ../fields.shape value=area.shape name=(concat "area." index ".shape") localize=true}}
{{formField ../fields.size value=area.size name=(concat "area." index ".size") localize=true}}
<a class="btn" data-tooltip="{{localize "CONTROLS.CommonDelete"}}" data-action="removeElement" data-index="{{index}}"><i class="fas fa-trash"></i></a>
</div>
<div class="flexcol">
<div class="flexrow">
<div class="sub-section-header">
<span>{{localize "DAGGERHEART.GENERAL.Effect.plural"}}</span>
<a><i class="fa-solid fa-plus icon-button" data-action="addEffect" data-area-index="{{index}}"></i></a>
</div>
<div class="two-columns even" style="width: 100%;">
{{#each area.effects as |effectId index|}}
<input type="hidden" name={{concat "area." @../key ".effects." index "._id"}} value="{{effect._id}}">
<input type="hidden" name={{concat "area." @../key ".effects." index}} value="{{effectId}}">
<div class="inventory-item single-img" data-effect-id="{{effectId}}" data-area-index="{{index}}" data-action="editEffect">
<div class="inventory-item single-img bordered" data-effect-id="{{effectId}}" data-area-index="{{index}}" data-action="editEffect">
<div class="inventory-item-header">
{{#with (@root.getEffectDetails effectId) as | details |}}
<div class="img-portait">
@ -29,9 +31,8 @@
<div class="item-name">{{name}}</div>
</div>
{{/with}}
<input type="hidden" name="effects.{{index}}._id" value="{{effectId}}">
<div class="controls">
<a data-tooltip="{{localize "CONTROLS.CommonDelete"}}" data-action="removeEffect" data-index="{{@../key}}" data-area-index="{{index}}"><i class="fas fa-trash"></i></a>
<a data-tooltip="{{localize "CONTROLS.CommonDelete"}}" data-action="removeEffect" data-area-index="{{@../key}}" data-index="{{index}}"><i class="fas fa-trash"></i></a>
</div>
</div>
</div>