diff --git a/app/imports/api/creature/Creatures.js b/app/imports/api/creature/Creatures.js index 654270c5..6aba8479 100644 --- a/app/imports/api/creature/Creatures.js +++ b/app/imports/api/creature/Creatures.js @@ -96,6 +96,11 @@ let CreatureSchema = new SimpleSchema({ type: Number, defaultValue: 0, }, + // Version of computation engine that was last used to compute this creature + computeVersion: { + type: String, + optional: true, + }, type: { type: String, defaultValue: 'pc', diff --git a/app/imports/api/creature/computation/computeEndStepProperty.js b/app/imports/api/creature/computation/computeEndStepProperty.js index 3ae9924a..091cc2bb 100644 --- a/app/imports/api/creature/computation/computeEndStepProperty.js +++ b/app/imports/api/creature/computation/computeEndStepProperty.js @@ -34,6 +34,7 @@ function computeAction(prop, memo){ if (prop.usesUsed >= prop.usesResult){ prop.insufficientResources = true; } + if (!prop.resources) return; // Attributes consumed prop.resources.attributesConsumed.forEach((attConsumed, i) => { if (attConsumed.variableName){ diff --git a/app/imports/api/creature/computation/recomputeCreature.js b/app/imports/api/creature/computation/recomputeCreature.js index 6e81836b..a2f3d298 100644 --- a/app/imports/api/creature/computation/recomputeCreature.js +++ b/app/imports/api/creature/computation/recomputeCreature.js @@ -102,12 +102,12 @@ export function recomputeCreatureByDoc(creature){ 'ancestors.id': creatureId, inactive: {$ne: true}, type: {$in: calculationPropertyTypes}, + // TODO filter out expensive fields, particularly icon field }).fetch(); /*getActiveProperties({ ancestorId: creatureId, filter: {type: {$in: calculationPropertyTypes}}, includeUntoggled: true, - // TODO filter out expensive fields, particularly icon field });*/ let computationMemo = new ComputationMemo(props, creature); computeMemo(computationMemo); diff --git a/app/imports/api/creature/computation/writeCreatureVariables.js b/app/imports/api/creature/computation/writeCreatureVariables.js index 7ab7aa95..4622a5cb 100644 --- a/app/imports/api/creature/computation/writeCreatureVariables.js +++ b/app/imports/api/creature/computation/writeCreatureVariables.js @@ -1,5 +1,6 @@ import { pick, forOwn } from 'lodash'; import Creatures from '/imports/api/creature/Creatures.js'; +import VERSION from '/imports/constants/VERSION.js'; export default function writeCreatureVariables(memo, creatureId) { const fields = [ @@ -31,5 +32,8 @@ export default function writeCreatureVariables(memo, creatureId) { let condensedStat = pick(stat, fields); memo.creatureVariables[variableName] = condensedStat; }); - Creatures.update(creatureId, {$set: {variables: memo.creatureVariables}}); + Creatures.update(creatureId, {$set: { + variables: memo.creatureVariables, + computeVersion: VERSION, + }}); } diff --git a/app/imports/constants/VERSION.js b/app/imports/constants/VERSION.js new file mode 100644 index 00000000..5adefb3b --- /dev/null +++ b/app/imports/constants/VERSION.js @@ -0,0 +1,6 @@ + +const VERSION = Meteor.isClient ? 'CLIENT' : process.env.SOURCE_VERSION || require('child_process') + .execSync('git rev-parse --short HEAD') + .toString().trim(); + +export default VERSION; diff --git a/app/imports/server/publications/singleCharacter.js b/app/imports/server/publications/singleCharacter.js index de2de40e..2b5bb64c 100644 --- a/app/imports/server/publications/singleCharacter.js +++ b/app/imports/server/publications/singleCharacter.js @@ -3,6 +3,8 @@ import Creatures from '/imports/api/creature/Creatures.js'; import CreatureProperties from '/imports/api/creature/CreatureProperties.js'; import CreatureLogs from '/imports/api/creature/log/CreatureLogs.js'; import { assertViewPermission } from '/imports/api/creature/creaturePermissions.js'; +import { recomputeCreatureById } from '/imports/api/creature/computation/recomputeCreature.js'; +import VERSION from '/imports/constants/VERSION.js'; let schema = new SimpleSchema({ creatureId: { @@ -28,8 +30,13 @@ Meteor.publish('singleCharacter', function(creatureId){ ], }); try { - assertViewPermission(creatureCursor.fetch()[0], userId); + let creature = creatureCursor.fetch()[0]; + assertViewPermission(creature, userId); + if (creature.computeVersion !== VERSION){ + recomputeCreatureById(creatureId) + } } catch (e){ + console.error(e); return []; } return [ diff --git a/app/imports/ui/properties/components/actions/ActionCard.vue b/app/imports/ui/properties/components/actions/ActionCard.vue index 4ae1cef9..dcd0566c 100644 --- a/app/imports/ui/properties/components/actions/ActionCard.vue +++ b/app/imports/ui/properties/components/actions/ActionCard.vue @@ -49,7 +49,7 @@