Effects targeting calculations by tag now work in the engine and actions
This commit is contained in:
@@ -21,6 +21,7 @@ const applyPropertyByType = {
|
||||
toggle,
|
||||
};
|
||||
|
||||
export default function applyProperty(node, ...args){
|
||||
return applyPropertyByType[node.node.type]?.(node, ...args);
|
||||
export default function applyProperty(node, opts, ...rest){
|
||||
opts.scope[`#${node.node.type}`] = node.node;
|
||||
return applyPropertyByType[node.node.type]?.(node, opts, ...rest);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import { dealDamageWork } from '/imports/api/creature/creatureProperties/methods
|
||||
import {insertCreatureLog} from '/imports/api/creature/log/CreatureLogs.js';
|
||||
import resolve, { Context, toString } from '/imports/parser/resolve.js';
|
||||
import logErrors from './shared/logErrors.js';
|
||||
import applyEffectsToCalculationParseNode from '/imports/api/engine/actions/applyPropertyByType/shared/applyEffectsToCalculationParseNode.js';
|
||||
|
||||
export default function applyDamage(node, {
|
||||
creature, targets, scope, log
|
||||
@@ -35,11 +36,12 @@ export default function applyDamage(node, {
|
||||
const logName = prop.damageType === 'healing' ? 'Healing' : 'Damage';
|
||||
|
||||
// Compile the dice roll and store that string first
|
||||
const {result: compiled} = resolve('compiled', prop.amount.parseNode, scope, context);
|
||||
logValue.push(toString(compiled));
|
||||
logErrors(context.errors, log);
|
||||
// const {result: compiled} = resolve('compiled', prop.amount.parseNode, scope, context);
|
||||
// logValue.push(toString(compiled));
|
||||
// logErrors(context.errors, log);
|
||||
|
||||
// roll the dice only and store that string
|
||||
applyEffectsToCalculationParseNode(prop.amount, log);
|
||||
const {result: rolled} = resolve('roll', prop.amount.parseNode, scope, context);
|
||||
logValue.push(toString(rolled));
|
||||
logErrors(context.errors, log);
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
import operator from '/imports/parser/parseTree/operator.js';
|
||||
import { parse } from '/imports/parser/parser.js';
|
||||
import logErrors from './logErrors.js';
|
||||
|
||||
export default function applyEffectsToCalculationParseNode(calcObj, log){
|
||||
if (!calcObj.effects) return;
|
||||
calcObj.effects.forEach(effect => {
|
||||
if (effect.operation !== 'add') return;
|
||||
if (!effect.amount) return;
|
||||
if (effect.amount.value === null) return;
|
||||
let effectParseNode;
|
||||
try {
|
||||
effectParseNode = parse(effect.amount.value.toString());
|
||||
calcObj.parseNode = operator.create({
|
||||
left: calcObj.parseNode,
|
||||
right: effectParseNode,
|
||||
operator: '+',
|
||||
fn: 'add'
|
||||
});
|
||||
} catch (e){
|
||||
logErrors([e], log)
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,9 +1,11 @@
|
||||
import evaluateCalculation from '/imports/api/engine/computation/utility/evaluateCalculation.js';
|
||||
import applyEffectsToCalculationParseNode from '/imports/api/engine/actions/applyPropertyByType/shared/applyEffectsToCalculationParseNode.js';
|
||||
import logErrors from './logErrors.js';
|
||||
|
||||
export default function recalculateCalculation(calc, scope, log, context){
|
||||
if (!calc?.parseNode) return;
|
||||
calc._parseLevel = 'reduce';
|
||||
applyEffectsToCalculationParseNode(calc, log);
|
||||
evaluateCalculation(calc, scope, context);
|
||||
logErrors(calc.errors, log);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user