45 lines
1.2 KiB
JavaScript
45 lines
1.2 KiB
JavaScript
import { forOwn, has } from 'lodash';
|
|
|
|
export default function computeLevels(memo){
|
|
computeClassLevels(memo);
|
|
computeTotalLevel(memo);
|
|
}
|
|
|
|
function computeClassLevels(memo){
|
|
forOwn(memo.classLevelsById, classLevel => {
|
|
let name = classLevel.variableName;
|
|
let stat = memo.statsByVariableName[name];
|
|
if (!stat){
|
|
memo.statsByVariableName[name] = classLevel;
|
|
memo.classes[name] = classLevel;
|
|
} else if (!has(stat, 'level')){
|
|
// Stat is overriden by an attribute
|
|
return;
|
|
} else if (stat.level < classLevel.level) {
|
|
memo.statsByVariableName[name] = classLevel;
|
|
memo.classes[name] = classLevel;
|
|
}
|
|
});
|
|
}
|
|
|
|
function computeTotalLevel(memo){
|
|
let currentLevel = memo.statsByVariableName['level'];
|
|
if (!currentLevel){
|
|
currentLevel = {
|
|
value: 0,
|
|
computationDetails: {
|
|
builtIn: true,
|
|
computed: true,
|
|
}
|
|
};
|
|
memo.statsByVariableName['level'] = currentLevel;
|
|
}
|
|
// bail out if overriden by an attribute
|
|
if (!currentLevel.computationDetails.builtIn) return;
|
|
let level = 0;
|
|
for (let name in memo.classes){
|
|
level += memo.classes[name].level || 0;
|
|
}
|
|
memo.statsByVariableName['level'].value = level;
|
|
}
|