42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
import walkDown from '/imports/api/engine/computation/utility/walkdown.js';
|
|
|
|
export default function computeInactiveStatus(node) {
|
|
const prop = node.node;
|
|
if (!isActive(prop)) {
|
|
// Mark prop inactive due to self
|
|
prop.inactive = true;
|
|
prop.deactivatedBySelf = true;
|
|
}
|
|
if (!childrenActive(prop)) {
|
|
// Mark children as inactive due to ancestor
|
|
walkDown(node.children, child => {
|
|
child.node.inactive = true;
|
|
child.node.deactivatedByAncestor = true;
|
|
});
|
|
}
|
|
}
|
|
|
|
function isActive(prop) {
|
|
if (prop.disabled) return false;
|
|
switch (prop.type) {
|
|
// Unprepared spells are inactive
|
|
case 'spell': return !!prop.prepared || !!prop.alwaysPrepared;
|
|
default: return true;
|
|
}
|
|
}
|
|
|
|
function childrenActive(prop) {
|
|
// Children of disabled properties are always inactive
|
|
if (prop.disabled) return false;
|
|
switch (prop.type) {
|
|
// Only equipped items with non-zero quantity have active children
|
|
case 'item': return !!prop.equipped && prop.quantity !== 0;
|
|
// The children of actions, spells, and triggers are always inactive
|
|
case 'action': return false;
|
|
case 'spell': return false;
|
|
case 'trigger': return false;
|
|
// Other children are active
|
|
default: return true;
|
|
}
|
|
}
|