mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-03-07 14:36:13 +01:00
[Feature] 1543 - SceneEnvironment Trigger Registration (#1564)
* Added trigger Registration/Unregistration for scene environments * Fixed so that saving throw damage mitigation works again (#1555) * . (#1563) * Fixed DowntimeMoves and ItemFeatures reset functions (#1568) * Fixed an error where a player having their token initially selected caused an error in effectsDisplay.mjs (#1569) * [Fix] Damage Rerolls (#1566) * Fixed so that damage rerolls work again * Set default data for a roll instead and fix title (#1570) * Set default data for a roll instead and fix title * Ensure same options object is used --------- Co-authored-by: Carlos Fernandez <CarlosFdez@users.noreply.github.com> * Fixed when users drag in compendium environments to the sceneEnvironments (#1573) * . --------- Co-authored-by: Carlos Fernandez <CarlosFdez@users.noreply.github.com>
This commit is contained in:
parent
0d84516813
commit
bdb8997324
2 changed files with 44 additions and 11 deletions
|
|
@ -72,10 +72,21 @@ export default class RegisteredTriggers extends Map {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unregisterSceneEnvironmentTriggers(flagSystemData) {
|
||||||
|
const sceneData = new game.system.api.data.scenes.DHScene(flagSystemData);
|
||||||
|
for (const environment of sceneData.sceneEnvironments) {
|
||||||
|
if (environment.pack) continue;
|
||||||
|
this.unregisterItemTriggers(environment.system.features);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
unregisterSceneTriggers(scene) {
|
unregisterSceneTriggers(scene) {
|
||||||
|
this.unregisterSceneEnvironmentTriggers(scene.flags.daggerheart);
|
||||||
|
|
||||||
for (const triggerKey of Object.keys(CONFIG.DH.TRIGGER.triggers)) {
|
for (const triggerKey of Object.keys(CONFIG.DH.TRIGGER.triggers)) {
|
||||||
const existingTrigger = this.get(triggerKey);
|
const existingTrigger = this.get(triggerKey);
|
||||||
if (!existingTrigger) continue;
|
if (!existingTrigger) continue;
|
||||||
|
|
||||||
const filtered = new Map();
|
const filtered = new Map();
|
||||||
for (const [uuid, data] of existingTrigger.entries()) {
|
for (const [uuid, data] of existingTrigger.entries()) {
|
||||||
if (!uuid.startsWith(scene.uuid)) filtered.set(uuid, data);
|
if (!uuid.startsWith(scene.uuid)) filtered.set(uuid, data);
|
||||||
|
|
@ -84,14 +95,17 @@ export default class RegisteredTriggers extends Map {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
registerSceneEnvironmentTriggers(flagSystemData) {
|
||||||
|
const sceneData = new game.system.api.data.scenes.DHScene(flagSystemData);
|
||||||
|
for (const environment of sceneData.sceneEnvironments) {
|
||||||
|
for (const feature of environment.system.features) {
|
||||||
|
if (feature) this.registerItemTriggers(feature, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
registerSceneTriggers(scene) {
|
registerSceneTriggers(scene) {
|
||||||
/* TODO: Finish sceneEnvironment registration and unreg */
|
this.registerSceneEnvironmentTriggers(scene.flags.daggerheart);
|
||||||
// const systemData = new game.system.api.data.scenes.DHScene(scene.flags.daggerheart);
|
|
||||||
// for (const environment of systemData.sceneEnvironments) {
|
|
||||||
// for (const feature of environment.system.features) {
|
|
||||||
// if(feature) this.registerItemTriggers(feature, true);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
for (const actor of scene.tokens.filter(x => x.actor).map(x => x.actor)) {
|
for (const actor of scene.tokens.filter(x => x.actor).map(x => x.actor)) {
|
||||||
if (actor.prototypeToken.actorLink) continue;
|
if (actor.prototypeToken.actorLink) continue;
|
||||||
|
|
@ -108,13 +122,11 @@ export default class RegisteredTriggers extends Map {
|
||||||
if (!triggerSettings.enabled) return updates;
|
if (!triggerSettings.enabled) return updates;
|
||||||
|
|
||||||
const dualityTrigger = this.get(trigger);
|
const dualityTrigger = this.get(trigger);
|
||||||
if (dualityTrigger) {
|
if (dualityTrigger?.size) {
|
||||||
const tokenBoundActors = ['adversary', 'environment'];
|
const triggerActors = ['character', 'adversary', 'environment'];
|
||||||
const triggerActors = ['character', ...tokenBoundActors];
|
|
||||||
for (let [itemUuid, { actor: actorUuid, triggeringActorType, commands }] of dualityTrigger.entries()) {
|
for (let [itemUuid, { actor: actorUuid, triggeringActorType, commands }] of dualityTrigger.entries()) {
|
||||||
const actor = await foundry.utils.fromUuid(actorUuid);
|
const actor = await foundry.utils.fromUuid(actorUuid);
|
||||||
if (!actor || !triggerActors.includes(actor.type)) continue;
|
if (!actor || !triggerActors.includes(actor.type)) continue;
|
||||||
if (tokenBoundActors.includes(actor.type) && !actor.getActiveTokens().length) continue;
|
|
||||||
|
|
||||||
const triggerData = CONFIG.DH.TRIGGER.triggers[trigger];
|
const triggerData = CONFIG.DH.TRIGGER.triggers[trigger];
|
||||||
if (triggerData.usesActor && triggeringActorType !== 'any') {
|
if (triggerData.usesActor && triggeringActorType !== 'any') {
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,27 @@ export default class DhScene extends Scene {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _preUpdate(changes, options, user) {
|
||||||
|
const allowed = await super._preUpdate(changes, options, user);
|
||||||
|
if (allowed === false) return false;
|
||||||
|
|
||||||
|
if (changes.flags?.daggerheart) {
|
||||||
|
if (this._source.flags.daggerheart) {
|
||||||
|
const unregisterTriggerData = this._source.flags.daggerheart.sceneEnvironments.reduce(
|
||||||
|
(acc, env) => {
|
||||||
|
if (!changes.flags.daggerheart.sceneEnvironments.includes(env)) acc.sceneEnvironments.push(env);
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
},
|
||||||
|
{ ...this._source.flags.daggerheart, sceneEnvironments: [] }
|
||||||
|
);
|
||||||
|
game.system.registeredTriggers.unregisterSceneEnvironmentTriggers(unregisterTriggerData);
|
||||||
|
}
|
||||||
|
|
||||||
|
game.system.registeredTriggers.registerSceneEnvironmentTriggers(changes.flags.daggerheart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_onDelete(options, userId) {
|
_onDelete(options, userId) {
|
||||||
super._onDelete(options, userId);
|
super._onDelete(options, userId);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue