diff --git a/app/imports/api/engine/actions/applyProperty.js b/app/imports/api/engine/actions/applyProperty.js index 2a8b3add..ec9c28d9 100644 --- a/app/imports/api/engine/actions/applyProperty.js +++ b/app/imports/api/engine/actions/applyProperty.js @@ -7,7 +7,6 @@ import note from './applyPropertyByType/applyNote.js'; import roll from './applyPropertyByType/applyRoll.js'; import savingThrow from './applyPropertyByType/applySavingThrow.js'; import toggle from './applyPropertyByType/applyToggle.js'; -import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; const applyPropertyByType = { action, @@ -23,8 +22,6 @@ const applyPropertyByType = { }; export default function applyProperty(node, actionContext, ...rest) { - applyNodeTriggers(node, actionContext, 'before'); actionContext.scope[`#${node.node.type}`] = node.node; applyPropertyByType[node.node.type]?.(node, actionContext, ...rest); - applyNodeTriggers(node, actionContext, 'after'); } diff --git a/app/imports/api/engine/actions/applyPropertyByType/applyAction.js b/app/imports/api/engine/actions/applyPropertyByType/applyAction.js index 19481501..f666bad9 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applyAction.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applyAction.js @@ -6,8 +6,10 @@ import CreatureProperties from '/imports/api/creature/creatureProperties/Creatur import { adjustQuantityWork } from '/imports/api/creature/creatureProperties/methods/adjustQuantity.js'; import { damagePropertyWork } from '/imports/api/creature/creatureProperties/methods/damageProperty.js'; import numberToSignedString from '/imports/ui/utility/numberToSignedString.js'; +import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; -export default function applyAction(node, actionContext){ +export default function applyAction(node, actionContext) { + applyNodeTriggers(node, 'before', actionContext); const prop = node.node; let targets = actionContext.targets; if (prop.target === 'self') targets = [actionContext.creature]; @@ -178,7 +180,8 @@ function applyCrits(value, scope){ return {criticalHit, criticalMiss}; } -function applyChildren(node, actionContext){ +function applyChildren(node, actionContext) { + applyNodeTriggers(node, 'after', actionContext); node.children.forEach(child => applyProperty(child, actionContext)); } diff --git a/app/imports/api/engine/actions/applyPropertyByType/applyAdjustment.js b/app/imports/api/engine/actions/applyPropertyByType/applyAdjustment.js index 525f980c..cc63f53a 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applyAdjustment.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applyAdjustment.js @@ -1,8 +1,10 @@ import applyProperty from '../applyProperty.js'; import recalculateCalculation from './shared/recalculateCalculation.js'; import { damagePropertyWork } from '/imports/api/creature/creatureProperties/methods/damageProperty.js'; +import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; export default function applyAdjustment(node, actionContext){ + applyNodeTriggers(node, 'before', actionContext); const prop = node.node; const damageTargets = prop.target === 'self' ? [actionContext.creature] : actionContext.targets; @@ -54,5 +56,6 @@ export default function applyAdjustment(node, actionContext){ } function applyChildren(node, actionContext){ + applyNodeTriggers(node, 'after', actionContext); node.children.forEach(child => applyProperty(child, actionContext)); } diff --git a/app/imports/api/engine/actions/applyPropertyByType/applyBranch.js b/app/imports/api/engine/actions/applyPropertyByType/applyBranch.js index 6e0ddd06..3106b88b 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applyBranch.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applyBranch.js @@ -1,9 +1,12 @@ import applyProperty from '../applyProperty.js'; import recalculateCalculation from './shared/recalculateCalculation.js'; import rollDice from '/imports/parser/rollDice.js'; +import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; export default function applyBranch(node, actionContext){ + applyNodeTriggers(node, 'before', actionContext); const applyChildren = function(){ + applyNodeTriggers(node, 'after', actionContext); node.children.forEach(child => applyProperty(child, actionContext)); }; const scope = actionContext.scope; @@ -27,6 +30,7 @@ export default function applyBranch(node, actionContext){ let index = Math.floor(prop.condition?.value); if (index < 1) index = 1; if (index > node.children.length) index = node.children.length; + applyNodeTriggers(node, 'after', actionContext); applyProperty(node.children[index - 1], actionContext); } break; @@ -57,12 +61,14 @@ export default function applyBranch(node, actionContext){ case 'random': if (node.children.length){ let index = rollDice(1, node.children.length)[0] - 1; + applyNodeTriggers(node, 'after', actionContext); applyProperty(node.children[index], actionContext); } break; case 'eachTarget': - if (targets.length){ + if (targets.length) { targets.forEach(target => { + applyNodeTriggers(node, 'after', actionContext); actionContext.targets = [target] node.children.forEach(child => applyProperty(child, actionContext)); }); diff --git a/app/imports/api/engine/actions/applyPropertyByType/applyBuff.js b/app/imports/api/engine/actions/applyPropertyByType/applyBuff.js index f36d5ae5..b6e7d682 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applyBuff.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applyBuff.js @@ -12,8 +12,10 @@ import symbol from '/imports/parser/parseTree/symbol.js'; import logErrors from './shared/logErrors.js'; import { insertCreatureLog } from '/imports/api/creature/log/CreatureLogs.js'; import cyrb53 from '/imports/api/engine/computation/utility/cyrb53.js'; +import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; export default function applyBuff(node, actionContext){ + applyNodeTriggers(node, 'before', actionContext); const prop = node.node; let buffTargets = prop.target === 'self' ? [actionContext.creature] : actionContext.targets; @@ -58,6 +60,7 @@ export default function applyBuff(node, actionContext){ } } }); + applyNodeTriggers(node, 'after', actionContext); // Don't apply the children of the buff, they get copied to the target instead } diff --git a/app/imports/api/engine/actions/applyPropertyByType/applyDamage.js b/app/imports/api/engine/actions/applyPropertyByType/applyDamage.js index 4d9145b3..0ee3bbd7 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applyDamage.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applyDamage.js @@ -8,9 +8,12 @@ import { damagePropertyWork } from '/imports/api/creature/creatureProperties/met import { getPropertiesOfType } from '/imports/api/engine/loadCreatures.js'; +import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; export default function applyDamage(node, actionContext){ + applyNodeTriggers(node, 'before', actionContext); const applyChildren = function(){ + applyNodeTriggers(node, 'after', actionContext); node.children.forEach(child => applyProperty(child, actionContext)); }; diff --git a/app/imports/api/engine/actions/applyPropertyByType/applyNote.js b/app/imports/api/engine/actions/applyPropertyByType/applyNote.js index b1b5e37a..0d5f9e84 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applyNote.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applyNote.js @@ -1,7 +1,9 @@ import recalculateInlineCalculations from './shared/recalculateInlineCalculations.js'; import applyProperty from '../applyProperty.js'; +import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; export default function applyNote(node, actionContext){ + applyNodeTriggers(node, 'before', actionContext); const prop = node.node; // Log Name, summary @@ -18,6 +20,8 @@ export default function applyNote(node, actionContext){ recalculateInlineCalculations(prop.description, actionContext); actionContext.addLog({value: prop.description.value}); } + // Apply triggers + applyNodeTriggers(node, 'after', actionContext); // Apply children node.children.forEach(child => applyProperty(child, actionContext)); } diff --git a/app/imports/api/engine/actions/applyPropertyByType/applyRoll.js b/app/imports/api/engine/actions/applyPropertyByType/applyRoll.js index 194c52a2..7d860948 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applyRoll.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applyRoll.js @@ -2,11 +2,14 @@ import applyProperty from '../applyProperty.js'; import logErrors from './shared/logErrors.js'; import applyEffectsToCalculationParseNode from '/imports/api/engine/actions/applyPropertyByType/shared/applyEffectsToCalculationParseNode.js'; import resolve, { toString } from '/imports/parser/resolve.js'; +import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; export default function applyRoll(node, actionContext){ + applyNodeTriggers(node, 'before', actionContext); const prop = node.node; const applyChildren = function(){ + applyNodeTriggers(node, 'after', actionContext); node.children.forEach(child => applyProperty(child, actionContext)); }; diff --git a/app/imports/api/engine/actions/applyPropertyByType/applySavingThrow.js b/app/imports/api/engine/actions/applyPropertyByType/applySavingThrow.js index 0fe34329..3a11e935 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applySavingThrow.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applySavingThrow.js @@ -2,8 +2,10 @@ import rollDice from '/imports/parser/rollDice.js'; import recalculateCalculation from './shared/recalculateCalculation.js'; import applyProperty from '../applyProperty.js'; import numberToSignedString from '/imports/ui/utility/numberToSignedString.js'; +import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; export default function applySavingThrow(node, actionContext){ + applyNodeTriggers(node, 'before', actionContext); const prop = node.node; let saveTargets = prop.target === 'self' ? [actionContext.creature] : actionContext.targets; @@ -41,6 +43,7 @@ export default function applySavingThrow(node, actionContext){ delete scope['$saveRoll']; const applyChildren = function () { + applyNodeTriggers(node, 'after', actionContext); actionContext.targets = [target] node.children.forEach(child => applyProperty(child, actionContext)); }; diff --git a/app/imports/api/engine/actions/applyPropertyByType/applyToggle.js b/app/imports/api/engine/actions/applyPropertyByType/applyToggle.js index 16a97412..be80b012 100644 --- a/app/imports/api/engine/actions/applyPropertyByType/applyToggle.js +++ b/app/imports/api/engine/actions/applyPropertyByType/applyToggle.js @@ -1,10 +1,13 @@ import applyProperty from '../applyProperty.js'; import recalculateCalculation from './shared/recalculateCalculation.js'; +import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; export default function applyToggle(node, actionContext){ + applyNodeTriggers(node, 'before', actionContext); const prop = node.node; recalculateCalculation(prop.condition, actionContext); if (prop.condition?.value) { + applyNodeTriggers(node, 'after', actionContext); return node.children.forEach(child => applyProperty(child, actionContext)); } }