From 2f893710e2064c64c24b4b2089f5f02a1a0e9f13 Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Thu, 23 Sep 2021 13:40:11 +0200 Subject: [PATCH] Tested and fixed damage multiplier computations --- .../computation/engine/combineStat.js | 4 +- .../buildComputation/linkTypeDependencies.js | 4 +- .../computeByType/computeVariable.js | 5 +-- .../tests/computeDamageMultipliers.testFn.js | 40 +++++++++++++++++++ .../tests/computeInventory.testFn.js | 1 - .../computeComputation/tests/index.js | 8 +++- 6 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 app/imports/api/creature/computation/newEngine/computeComputation/tests/computeDamageMultipliers.testFn.js diff --git a/app/imports/api/creature/computation/engine/combineStat.js b/app/imports/api/creature/computation/engine/combineStat.js index f2c10e8f..e69d9c27 100644 --- a/app/imports/api/creature/computation/engine/combineStat.js +++ b/app/imports/api/creature/computation/engine/combineStat.js @@ -186,9 +186,9 @@ function combineSkill(stat, aggregator, memo){ function combineDamageMultiplier(stat){ if (stat.immunityCount) return 0; let result; - if (stat.ressistanceCount && !stat.vulnerabilityCount){ + if (stat.resistanceCount && !stat.vulnerabilityCount){ result = 0.5; - } else if (!stat.ressistanceCount && stat.vulnerabilityCount){ + } else if (!stat.resistanceCount && stat.vulnerabilityCount){ result = 2; } else { result = 1; diff --git a/app/imports/api/creature/computation/newEngine/buildComputation/linkTypeDependencies.js b/app/imports/api/creature/computation/newEngine/buildComputation/linkTypeDependencies.js index d58edd84..ae68ba30 100644 --- a/app/imports/api/creature/computation/newEngine/buildComputation/linkTypeDependencies.js +++ b/app/imports/api/creature/computation/newEngine/buildComputation/linkTypeDependencies.js @@ -68,7 +68,9 @@ function linkAttribute(dependencyGraph, prop){ function linkDamageMultiplier(dependencyGraph, prop){ prop.damageTypes.forEach(damageType => { - dependencyGraph.addLink(`${damageType}Multiplier`, prop._id, prop.type); + // Remove all non-letter characters from the damage name + const damageName = damageType.replace(/[^a-z]/gi, '') + dependencyGraph.addLink(`${damageName}Multiplier`, prop._id, prop.type); }); } diff --git a/app/imports/api/creature/computation/newEngine/computeComputation/computeByType/computeVariable.js b/app/imports/api/creature/computation/newEngine/computeComputation/computeByType/computeVariable.js index 26ac02de..9cf43842 100644 --- a/app/imports/api/creature/computation/newEngine/computeComputation/computeByType/computeVariable.js +++ b/app/imports/api/creature/computation/newEngine/computeComputation/computeByType/computeVariable.js @@ -69,18 +69,17 @@ function combineMultiplierAggregator(node){ if (aggregator.immunityCount){ value = 0; } else if ( - aggregator.ressistanceCount && + aggregator.resistanceCount && !aggregator.vulnerabilityCount ){ value = 0.5; } else if ( - !aggregator.ressistanceCount && + !aggregator.resistanceCount && aggregator.vulnerabilityCount ){ value = 2; } else { value = 1; } - node.data.damageMultiplyValue = value; } diff --git a/app/imports/api/creature/computation/newEngine/computeComputation/tests/computeDamageMultipliers.testFn.js b/app/imports/api/creature/computation/newEngine/computeComputation/tests/computeDamageMultipliers.testFn.js new file mode 100644 index 00000000..94ce0b24 --- /dev/null +++ b/app/imports/api/creature/computation/newEngine/computeComputation/tests/computeDamageMultipliers.testFn.js @@ -0,0 +1,40 @@ +import { buildComputationFromProps } from '/imports/api/creature/computation/newEngine/buildCreatureComputation.js'; +import { assert } from 'chai'; +import computeCreatureComputation from '../../computeCreatureComputation.js'; +import clean from '../../utility/cleanProp.testFn.js'; + +export default function(){ + const computation = buildComputationFromProps(testProperties); + computeCreatureComputation(computation); + const scope = id => computation.scope[id]; + assert.equal(scope('blugeoningMultiplier').value, 1); + assert.equal(scope('customDamageMultiplier').value, 0.5); + assert.equal(scope('slashingMultiplier').value, 0); +} + +var testProperties = [ + clean({ + _id: 'resistanceId', + type: 'damageMultiplier', + damageTypes: ['blugeoning', 'customDamage'], + value: 0.5, + }), + clean({ + _id: 'vulnerabilityId', + type: 'damageMultiplier', + damageTypes: ['blugeoning'], + value: 2, + }), + clean({ + _id: 'slashResistId', + type: 'damageMultiplier', + damageTypes: ['slashing'], + value: 0.5, + }), + clean({ + _id: 'slashInvulnId', + type: 'damageMultiplier', + damageTypes: ['slashing'], + value: 0, + }), +]; diff --git a/app/imports/api/creature/computation/newEngine/computeComputation/tests/computeInventory.testFn.js b/app/imports/api/creature/computation/newEngine/computeComputation/tests/computeInventory.testFn.js index 4b6b6a78..d77b5b59 100644 --- a/app/imports/api/creature/computation/newEngine/computeComputation/tests/computeInventory.testFn.js +++ b/app/imports/api/creature/computation/newEngine/computeComputation/tests/computeInventory.testFn.js @@ -8,7 +8,6 @@ export default function(){ computeCreatureComputation(computation); const prop = id => computation.propsById[id]; const scope = id => computation.scope[id].value; - console.log(computation.scope); assert.equal(scope('weightEquipment'), 2); assert.equal(scope('valueEquipment'), 3); diff --git a/app/imports/api/creature/computation/newEngine/computeComputation/tests/index.js b/app/imports/api/creature/computation/newEngine/computeComputation/tests/index.js index ff62d6aa..d8d61cf0 100644 --- a/app/imports/api/creature/computation/newEngine/computeComputation/tests/index.js +++ b/app/imports/api/creature/computation/newEngine/computeComputation/tests/index.js @@ -3,8 +3,9 @@ import computeAttribute from './computeAttribute.testFn.js'; import computeClasses from './computeClasses.testFn.js'; import computeConstants from './computeConstants.testFn.js'; import computeInventory from './computeInventory.testFn.js'; +import computeDamageMultipliers from './computeDamageMultipliers.testFn.js'; -export default [/*{ +export default [{ text: 'Computes actions', fn: computeAction, },{ @@ -16,7 +17,10 @@ export default [/*{ },{ text: 'Computes constants', fn: computeConstants, -},*/{ +},{ text: 'Computes inventory', fn: computeInventory, +},{ + text: 'Computes damage multipliers', + fn: computeDamageMultipliers, }];