Completed functionality

This commit is contained in:
WBHarry 2026-04-18 00:20:44 +02:00
parent 5e608dea99
commit f6aa3dc750
8 changed files with 68 additions and 14 deletions

View file

@ -3,6 +3,7 @@ import * as applications from './module/applications/_module.mjs';
import * as data from './module/data/_module.mjs'; import * as data from './module/data/_module.mjs';
import * as models from './module/data/_module.mjs'; import * as models from './module/data/_module.mjs';
import * as documents from './module/documents/_module.mjs'; import * as documents from './module/documents/_module.mjs';
import * as regionBehaviors from './module/data/regionBehavior/_module.mjs';
import { macros } from './module/_module.mjs'; import { macros } from './module/_module.mjs';
import * as collections from './module/documents/collections/_module.mjs'; import * as collections from './module/documents/collections/_module.mjs';
import * as dice from './module/dice/_module.mjs'; import * as dice from './module/dice/_module.mjs';
@ -45,6 +46,8 @@ CONFIG.ActiveEffect.documentClass = documents.DhActiveEffect;
CONFIG.ActiveEffect.dataModels = models.activeEffects.config; CONFIG.ActiveEffect.dataModels = models.activeEffects.config;
CONFIG.ActiveEffect.changeTypes = { ...CONFIG.ActiveEffect.changeTypes, ...models.activeEffects.changeEffects }; CONFIG.ActiveEffect.changeTypes = { ...CONFIG.ActiveEffect.changeTypes, ...models.activeEffects.changeEffects };
CONFIG.RegionBehavior.documentClass = documents.DhRegionBehavior;
CONFIG.Combat.documentClass = documents.DhpCombat; CONFIG.Combat.documentClass = documents.DhpCombat;
CONFIG.Combat.dataModels = { base: models.DhCombat }; CONFIG.Combat.dataModels = { base: models.DhCombat };
CONFIG.Combatant.documentClass = documents.DHCombatant; CONFIG.Combatant.documentClass = documents.DHCombatant;

View file

@ -1103,3 +1103,9 @@ export const fallAndCollisionDamage = {
damageFormula: '1d20 + 5' damageFormula: '1d20 + 5'
} }
}; };
export const simpleDispositions = {
HOSTILE: -1,
NEUTRAL: 0,
FRIENDLY: 1
};

View file

@ -112,6 +112,9 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel {
initial: CONFIG.DH.GENERAL.range.veryClose.id, initial: CONFIG.DH.GENERAL.range.veryClose.id,
label: 'DAGGERHEART.ACTIVEEFFECT.Config.area.size' label: 'DAGGERHEART.ACTIVEEFFECT.Config.area.size'
}), }),
targetDispositions: new fields.SetField(new fields.NumberField({
})),
}, { nullable: true, initial: null }) }, { nullable: true, initial: null })
}; };
} }

View file

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

View file

@ -0,0 +1,14 @@
export default class DhApplyActiveEffect extends CONFIG.RegionBehavior.dataModels.applyActiveEffect {
static #tokenDispositionChecker = (eventFunction) => (event) => {
const { token } = event.data;
if (token.disposition === -1) {
eventFunction.bind(this)(event);
}
}
/** @override */
static events = Object.entries(super.events).reduce((acc, [key, func]) => {
acc[key] = DhApplyActiveEffect.#tokenDispositionChecker(func);
return acc;
}, {});
}

View file

@ -9,3 +9,4 @@ export { default as DhScene } from './scene.mjs';
export { default as DhToken } from './token.mjs'; export { default as DhToken } from './token.mjs';
export { default as DhTooltipManager } from './tooltipManager.mjs'; export { default as DhTooltipManager } from './tooltipManager.mjs';
export { default as DhTokenManager } from './tokenManager.mjs'; export { default as DhTokenManager } from './tokenManager.mjs';
export { default as DhRegionBehavior } from './regionBehavior.mjs';

View file

@ -0,0 +1,28 @@
export default class DhRegionBehavior extends RegionBehavior {
/**@inheritDoc */
async _handleRegionEvent(event) {
if (!(this.system instanceof foundry.data.regionBehaviors.RegionBehaviorType)) return;
// Optionally prevent event if not applicable
// Currently only caring about statically registered events
if (event.name in this.system.constructor.events) {
if (this.isEventApplicable(event) === false) return;
super._handleRegionEvent(event);
}
}
isEventApplicable(event) {
switch(this.type) {
case 'applyActiveEffect':
/* If reworked to an area, we'll probably still have to override the onEnter/onExit methods to filter which effects apply */
const effects = this.system.effects.map(effect => foundry.utils.fromUuidSync(effect)).filter(x => x);
const applicableDispositions = effects.first().system.area?.targetDispositions??[];
if(!applicableDispositions.size) return true;
return event.data.token.disposition === CONST.TOKEN_DISPOSITIONS.SECRET ||
applicableDispositions.has(event.data.token.disposition);
default:
return true;
}
}
}

View file

@ -55,21 +55,19 @@
</legend> </legend>
{{#if document.system.area}} {{#if document.system.area}}
{{formGroup systemFields.area.fields.type value=source.system.area.type localize=true blank=false }}
{{formGroup systemFields.area.fields.type value=source.system.area.type localize=true blank=false }} {{formGroup systemFields.area.fields.shape value=source.system.area.shape localize=true blank=false }}
{{formGroup systemFields.area.fields.shape value=source.system.area.shape localize=true blank=false }} <div class="form-group">
<div class="form-group"> <div class="form-fields">
<div class="form-fields"> {{#if areaDaggerheartRange}}
{{#if areaDaggerheartRange}} {{formGroup systemFields.area.fields.size value=source.system.area.size choices=templateRanges blank=false localize=true }}
{{formGroup systemFields.area.fields.size value=source.system.area.size choices=templateRanges blank=false localize=true }} {{else}}
{{else}} {{formGroup systemFields.area.fields.size value=source.system.area.size localize=true }}
{{formGroup systemFields.area.fields.size value=source.system.area.size localize=true }} {{/if}}
{{/if}} <label>{{localize "Use Daggerheart Range"}}</label>
<label>{{localize "Use Daggerheart Range"}}</label> <input type="checkbox" class="area-range-type-input" {{checked areaDaggerheartRange}} />
<input type="checkbox" class="area-range-type-input" {{checked areaDaggerheartRange}} />
</div>
</div> </div>
</div>
{{/if}} {{/if}}
</fieldset> </fieldset>
</section> </section>