Buffs can skip var freezing, freeze inline calcs

This commit is contained in:
Stefan Zermatten
2022-08-25 15:10:56 +02:00
parent 249aebea0f
commit a84da7d8a5
3 changed files with 53 additions and 1 deletions

View File

@@ -13,6 +13,7 @@ import logErrors from './shared/logErrors.js';
import { insertCreatureLog } from '/imports/api/creature/log/CreatureLogs.js'; import { insertCreatureLog } from '/imports/api/creature/log/CreatureLogs.js';
import cyrb53 from '/imports/api/engine/computation/utility/cyrb53.js'; import cyrb53 from '/imports/api/engine/computation/utility/cyrb53.js';
import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js'; import { applyNodeTriggers } from '/imports/api/engine/actions/applyTriggers.js';
import INLINE_CALCULATION_REGEX from '/imports/constants/INLINE_CALCULTION_REGEX.js';
export default function applyBuff(node, actionContext){ export default function applyBuff(node, actionContext){
applyNodeTriggers(node, 'before', actionContext); applyNodeTriggers(node, 'before', actionContext);
@@ -32,7 +33,9 @@ export default function applyBuff(node, actionContext){
}); });
} }
addChildrenToPropList(node.children); addChildrenToPropList(node.children);
crystalizeVariables({propList, actionContext}); if (!prop.skipCrystalization) {
crystalizeVariables({propList, actionContext});
}
let oldParent = { let oldParent = {
id: prop.parent.id, id: prop.parent.id,
@@ -96,6 +99,7 @@ function crystalizeVariables({propList, actionContext}){
delete prop._skipCrystalize; delete prop._skipCrystalize;
return; return;
} }
// Iterate through all the calculations and crystalize them
computedSchemas[prop.type].computedFields().forEach( calcKey => { computedSchemas[prop.type].computedFields().forEach( calcKey => {
applyFnToKey(prop, calcKey, (prop, key) => { applyFnToKey(prop, calcKey, (prop, key) => {
const calcObj = get(prop, key); const calcObj = get(prop, key);
@@ -132,5 +136,36 @@ function crystalizeVariables({propList, actionContext}){
calcObj.hash = cyrb53(calcObj.calculation); calcObj.hash = cyrb53(calcObj.calculation);
}); });
}); });
// For each key in the schema
computedSchemas[prop.type].inlineCalculationFields().forEach( calcKey => {
// That ends in .inlineCalculations
applyFnToKey(prop, calcKey, (prop, key) => {
const inlineCalcObj = get(prop, key);
if (!inlineCalcObj) return;
// If there is no text, skip
if (!inlineCalcObj.text){
return;
}
// Replace all the existing calculations
let index = -1;
inlineCalcObj.text = inlineCalcObj.text.replace(INLINE_CALCULATION_REGEX, () => {
index += 1;
return `{${inlineCalcObj.inlineCalculations[index].calculation}}`;
});
// Set the value to the uncomputed string
inlineCalcObj.value = inlineCalcObj.text;
// Write a new hash
const inlineCalcHash = cyrb53(inlineCalcObj.text);
if (inlineCalcHash === inlineCalcObj.hash) {
// Skip if nothing changed
return;
}
inlineCalcObj.hash = inlineCalcHash;
});
});
}); });
} }

View File

@@ -31,6 +31,11 @@ let BuffSchema = createPropertySchema({
}, },
// Prevent the property from showing up in the log // Prevent the property from showing up in the log
silent: { silent: {
type: Boolean,
optional: true,
},
// Prevent the children from being crystalized
skipCrystalization: {
type: Boolean, type: Boolean,
optional: true, optional: true,
}, },

View File

@@ -72,6 +72,18 @@
@change="change('silent', ...arguments)" @change="change('silent', ...arguments)"
/> />
</v-col> </v-col>
<v-col
cols="12"
sm="6"
md="4"
>
<smart-switch
label="Don't freeze variables"
:value="model.skipCrystalization"
:error-messages="errors.skipCrystalization"
@change="change('skipCrystalization', ...arguments)"
/>
</v-col>
</v-row> </v-row>
<smart-combobox <smart-combobox
label="Tags" label="Tags"